这可以很好地工作:
$post->comments()->withTrashed()->get()->each->delete();
因为它确实删除了6行,所以each
作为集合返回。
但是,这会抛出一个异常:
$post->comments()->withTrashed()->get()->each->restore();
我注意到它还恢复了数据库中的1行(第一行)( Collection有6行)。
上下文:当我恢复帖子时,我在观察者中使用这样的代码来恢复评论。
下面的代码将抛出完全相同的异常InvalidArgumentException with message 'Illegale operator and value combination.'
:
$post->comments()->withTrashed()->where('deleted_at', '>=', $post->deleted_at)->get()->each->restore();
where()
条件允许我只恢复与帖子的软删除一起被软删除的评论(这样它就不会在整个帖子删除之前也恢复由版主删除的评论)。
发布于 2019-10-08 17:29:29
$post->comments()->onlyTrashed()->get()->each->restore();
不知道它是否有帮助,但你可以试试这个。由于恢复只能在垃圾帖子上工作,也许这就是导致问题的原因。
发布于 2019-10-09 03:31:18
$post->comments()
->onlyTrashed()->where('deleted_at', '>=', $post->deleted_at)
->get()
->each->restore();
这实际上是有效的。问题是因为我的观察者在restored
触发,这会导致$post->deleted_at
在第一次迭代后立即为null
。已使用restoring()
模型事件而不是restored()
修复此问题。
这(上面)回答了我最初的问题。
我还没有想出一种继续使用restored
的方法(我希望在恢复帖子后恢复评论),因为restored
使$post->deleted_at
变成null
,因此在我的where()
条件下无效。在使用restored()
时,我需要找到一种方法来保存原始的$post->deleted_at
值。getDirty()
和getChanges()
也帮不上忙。我将在3天内接受我自己的答案,除非有人分享了一种方法,也保留了restored
事件。我相信这已超出了最初问题的范围?
https://stackoverflow.com/questions/58278589
复制相似问题