Как отобразить в блейде, какие строки мягко удалены? - PullRequest
0 голосов
/ 08 июня 2018

Я создал систему опроса, и в бэкэнде (область CMS) я хочу, чтобы администраторы могли удалять опросы.Когда администратор удаляет опрос, он должен мягко удалить опрос.Это работает как задумано, однако я также хочу, чтобы администратор мог восстановить опрос.Для этого я показываю все опросы (включая удаленные опросы) в админке.

PollController index () для получения всех опросов

$polls = Poll::withTrashed()->get();

В блейде я хочу иметь две разные кнопки для каждого опроса.Один из восстановления и один для удаления, но я хочу отображать только 1 кнопку для каждого опроса в зависимости от того, можно ли его восстановить или удалить.

Чтобы сделать это, я поместил это внутри foreach в лезвии:

@if($poll->trashed())
// Restore button
@else
// Delete button
@endif

Однако проблема в том, что trashed () продолжает возвращать true для всех опросов, когда только 1 из 3 моих опросов фактически удаляется.Я не уверен, почему trashed () возвращает все это правда?

Как бы заставить этот метод работать правильно?Спасибо.

1 Ответ

0 голосов
/ 08 июня 2018

ЧАСТЬ 1 Это зависит от вашего запроса.При мягком удалении Laravel будет запрашивать все модели, которые по умолчанию не удаляются мягко.Если вы также хотите получить модели с программным удалением, вам нужно вызвать метод withTrashed () для вашего запроса.Подробнее здесь: https://laravel.com/docs/5.5/eloquent#querying-soft-deleted-models

Чтобы понять, что делает withTrashed(), вам необходимо понять, как работает мягкое удаление.Мягкое удаление моделей работает путем добавления нового столбца в таблицы вашей базы данных с именем dele_at.По умолчанию это значение равно нулю.Когда вы мягко удаляете модель, Laravel поместит текущую метку времени в этот столбец.Следовательно, это поле больше не содержит нулевое значение.

При запросе моделей при использовании soft-deletes Laravel добавляет к запросу условие об удалении в виде удаленного_значения.Вызов метода withTrashed () удаляет это условие из запроса.

Ознакомьтесь с источником модификатора запроса по умолчанию и метода withTrashed.

PART 2 Это события.Вы можете вызвать это, чтобы сообщить Laravel, что он должен выполнить это конкретное закрытие, когда происходит это событие.В вашем примере это прослушивание «удаления» события.Подробнее об этом здесь: https://laravel.com/docs/5.5/eloquent#events

ЧАСТЬ 3 Вы можете полностью delete soft-deletable модели с помощью метода forceDelete().См. «Удаление моделей без возможности восстановления» здесь: https://laravel.com/docs/5.5/eloquent#querying-soft-deleted-models

НА ПРИМЕРЕ $items = App\Model::withTrashed()->get();

Если вы хотите восстановить один элемент, просто найдите его по ID: $item = App\Model::find($id);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...