这可以很好地工作:
$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
复制相似问题