Как лучше в админке Orchid Laravel получить модель удаленную программно используя трейт SoftDeletes?

Ссылка скопирована
1 ответ

По вводным: админка Orchid на Laravel. Пользователей можно удалять программно используя поле в таблице deleted_at и трейт в модели SoftDeletes. Список пользователей смог вывести с удаленными моделями - в методе query экрана UserListScreen добавил ->withTrashed():

public function query(): iterable { return [ 'users' => User::with('roles') ->withTrashed() ->filters(UserFiltersLayout::class) ->defaultSort('id', 'asc') ->paginate(), ]; }

Нужно понять: а как это сделать в экране UserEditScreen, где можно просматривать и редактировать пользователя?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ирина WP Ответ

В Laravel Orchid модель, удаленную через SoftDeletes, можно получить только если запрос явно включает trashed-записи. По умолчанию Eloquent скрывает такие записи глобальным scope. Поэтому в админке Orchid нужно использовать withTrashed() или onlyTrashed() в query, screen или repository-слое.

Если у модели есть трейт SoftDeletes:

use IlluminateDatabaseEloquentSoftDeletes;
 
class Product extends Model
{
    use SoftDeletes;
}

use IlluminateDatabaseEloquentSoftDeletes; class Product extends Model { use SoftDeletes; }

Получить конкретную удаленную запись можно так:

$product = Product::withTrashed()->findOrFail($id);

$product = Product::withTrashed()->findOrFail($id);

Если нужны только удаленные:

$products = Product::onlyTrashed()->paginate();

$products = Product::onlyTrashed()->paginate();

В Orchid Screen это обычно делается в методе query:

public function query(): iterable
{
    return [
        'products' => Product::withTrashed()
            ->filters()
            ->defaultSort('id', 'desc')
            ->paginate(),
    ];
}

public function query(): iterable { return [ 'products' => Product::withTrashed() ->filters() ->defaultSort('id', 'desc') ->paginate(), ]; }

  • проверьте, что в таблице есть колонка deleted_at;
  • проверьте, что модель действительно использует SoftDeletes;
  • для восстановления используйте restore();
  • для полного удаления используйте forceDelete();
  • не показывайте удаленные записи в обычном списке без визуальной пометки.

Если Orchid route model binding не находит удаленную модель, не полагайтесь на автоматическую подстановку. Передайте ID и найдите модель вручную через withTrashed(). Для интерфейса удобно добавить фильтр «Все / Активные / Удаленные» и отдельные действия «Восстановить» и «Удалить навсегда».

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно