2017-05-07 65 views
2

有没有办法检索laravel 5.4中与软删除用户相关的帖子?我想,因为用户仍然在数据库中应该有办法。在laravel 5.4中检索软删除的用户帖子

+1

通常通过在该记录上设置布尔标志“已删除”为true来完成“软删除”。查询跳过了“删除”纯粹的用户端列表。但正如你所说,他们仍然在那里直接链接或为现有职位取名。我对laravel 5.4没有经验,但是没有办法没有技术上的理由。 Override或Default值都可以轻松完成此操作。将更多的打赌覆盖(数据库查询性能的原因)。 – Christopher

+0

软删除用户a)将用户留在数据库中(去看看)和b)对其关系没有做任何事情(除非你编码自己的逻辑去做)。你有没有试图以任何方式访问这些帖子?你使用什么代码? – ceejayoz

+0

肯定,但由于某种原因,当我用柔软的后沿删除用户失败每次公共职能破坏($ ID) {$ 管理员=用户:: findOrFail($ ID); $ admins - > project() - > delete(); $ admins-> project() - > delete(); return redirect() - > back(); }这是使用和已经建立的关系和其他一切的销毁方法 – user3089096

回答

4

当您软删除一条记录时,它会在数据库中删除flagged,但该记录仍然存在。

,您仍然可以检索它是这样的:

$users = App\User::withTrashed()->get(); 
-1

这应该工作,我想。

Post::whereHas('users', function ($q) { 
    $q->whereNotNull($q->getModel()->getQualifiedDeletedAtColumn()); 
})->get(); 

这是一个where子句基本上添加到加入表deleted_at列是not null。或者,这也可能是单线的。

User::with('posts')->onlyTrashed()->get()->map->posts->collapse(); 

onlyTrashed是如所描述的在here性状SoftDeletes定义的方法。在onlyTrashed旁边有更多'范围扩展',它们是restore,withTrashed,withoutTrashed

我不知道,但我认为在collapse之后加入->unique('id')也不错。

+0

这是waaaaaay过于复杂的事情,当OP只需'用户:: withTrashed() - > whereId($ ID) - >第一();' – ceejayoz

+0

@ceejayoz OP的问题:有没有什么办法来检索** **职位是与一个软删除**用户相关**。关系。 – Chay22

+0

好吧,但现在当我尝试删除用户和发布它只是删除用户,而不是帖子。公共职能销毁($ id) { $ admins = User :: findOrFail($ id); $ admins - > delete(); $ admins-> project() - > delete(); return redirect() - > back(); },这是laracasts上使用的代码。由于某种原因,它没有得到相关的使用的职位,但只是获取用户,并删除it.this是它显示FatalThrowableError在HomeController.php行70错误: 调用一个成员函数上的空 – user3089096

0

我不想恢复已删除的帖子,并保留自己的用户删除原因,这将返回一个断开的关系。

,但如果你想恢复它,知道删除用户的id,你可以这样恢复:同样

Post::onlyTrashed()->where('user_id', $id)->restore(); 

,我建议不这样做。