restore () выдает InvalidArgumentException - PullRequest
       36

restore () выдает InvalidArgumentException

0 голосов
/ 08 октября 2019

Это прекрасно работает:

$post->comments()->withTrashed()->get()->each->delete();

Так как действительно удаляет 6 строк, each возвращается как коллекция.

Однако это вызывает исключение:

$post->comments()->withTrashed()->get()->each->restore();

Я заметил, что он также восстановил 1 строку (первую строку) в базе данных (коллекция имеет 6 строк).

Контекст: я использую такой код в Observer для восстановления комментариев при восстановленииPost.

Следующее будет выдавать точно такое же исключение InvalidArgumentException with message 'Illegale operator and value combination.':

$post->comments()->withTrashed()->where('deleted_at', '>=', $post->deleted_at)->get()->each->restore();

Условие where() позволяет мне восстанавливать только комментарии, программно удаленные вместе с программным удалением сообщения (так, чтобы онотакже не восстанавливать комментарии, удаленные модераторами до полного удаления сообщения).

Ответы [ 2 ]

0 голосов
/ 08 октября 2019
        $post->comments()
            ->onlyTrashed()->where('deleted_at', '>=', $post->deleted_at)
            ->get()
            ->each->restore();

Это на самом деле работает. Проблема была в том, что мой Observer срабатывает на restored, что сразу после первой итерации $post->deleted_at будет null. Проблема была исправлена ​​с использованием события модели restoring() вместо restored().

. Это (выше) отвечает на мой первоначальный вопрос.

Я еще не нашел способ продолжать использовать restored (я хочу, чтобы комментарии были восстановлены после восстановления сообщения), так как restored делает $post->deleted_at стать null, таким образом, недействительным в моемwhere() состояние. Мне нужно найти способ сохранить исходное значение $post->deleted_at, используя restored(). getDirty() и getChanges() не помогли. Я приму свой собственный ответ через 3 дня, если кто-то не расскажет, как сохранить событие restored. Я полагаю, что это выходит за рамки первоначального вопроса в любом случае?

0 голосов
/ 08 октября 2019

$ post-> comments () -> onlyTrashed () -> get () -> each-> restore ();

Не знаю, поможет ли это, но вы можете попробовать это. Поскольку восстановление может работать только на удаленных сообщениях, возможно, именно это и является причиной проблемы.

...