Это отлично работает:
$post->comments()->withTrashed()->get()->each->delete();
Поскольку он действительно удаляет 6 строк, each
возвращает как коллекцию.
Однако это вызывает исключение:
$post->comments()->withTrashed()->get()->each->restore();
Я заметил, что он также восстановил 1 строку (первую строку) в базе данных (в коллекции 6 строк).
Контекст: я использую такой код в Observer для восстановления комментариев при восстановлении сообщения.
Следующее вызовет точно такое же исключение InvalidArgumentException with message 'Illegale operator and value combination.'
:
$post->comments()->withTrashed()->where('deleted_at', '>=', $post->deleted_at)->get()->each->restore();
Условие where()
позволяет мне восстанавливать только мягко удаленные комментарии вместе с программным удалением сообщения (чтобы оно также не восстанавливало комментарии, удаленные модераторами до удаления всего сообщения).
$value
нулевым. Условие, при котором может вылететь ошибка. - person adam   schedule 08.10.2019restored()
Post. Таким образом, атрибут$post->deleted_at
имеет значениеnull
после первой итерации (что объясняет, почему он обновил только первую строку базы данных, а затем выдал исключение, поскольку затем он выполняет>=
при нулевом значении. Мне удалось быстро исправить изменениеrestored()
наrestoring()
, но я не доволен этим. Я хочу восстановить комментарии после восстановления поста, а не раньше. - person Musa   schedule 08.10.2019