首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >restore()抛出InvalidArgumentException

restore()抛出InvalidArgumentException
EN

Stack Overflow用户
提问于 2019-10-08 08:08:59
回答 2查看 53关注 0票数 0

这可以很好地工作:

代码语言:javascript
运行
复制
$post->comments()->withTrashed()->get()->each->delete();

因为它确实删除了6行,所以each作为集合返回。

但是,这会抛出一个异常:

代码语言:javascript
运行
复制
$post->comments()->withTrashed()->get()->each->restore();

我注意到它还恢复了数据库中的1行(第一行)( Collection有6行)。

上下文:当我恢复帖子时,我在观察者中使用这样的代码来恢复评论。

下面的代码将抛出完全相同的异常InvalidArgumentException with message 'Illegale operator and value combination.'

代码语言:javascript
运行
复制
$post->comments()->withTrashed()->where('deleted_at', '>=', $post->deleted_at)->get()->each->restore();

where()条件允许我只恢复与帖子的软删除一起被软删除的评论(这样它就不会在整个帖子删除之前也恢复由版主删除的评论)。

EN

回答 2

Stack Overflow用户

发布于 2019-10-08 17:29:29

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

不知道它是否有帮助,但你可以试试这个。由于恢复只能在垃圾帖子上工作,也许这就是导致问题的原因。

票数 0
EN

Stack Overflow用户

发布于 2019-10-09 03:31:18

代码语言:javascript
运行
复制
        $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事件。我相信这已超出了最初问题的范围?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58278589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档