你好,我刚刚注意到 softDelete 的一个奇怪行为。基本上,当我查询一组相关模型时,Eloquent 返回一个也包含软删除行的集合。
我一直在遵循有关软删除特征使用的 4.2 指南,只要我获取/删除/恢复/强制删除我的模型,我的代码就可以正常工作。这个问题是由关系引发的。
考虑这种情况:我有一个具有BelongToMany友谊关系的用户模型,其中友谊状态可以被接受/待处理/请求/阻止,如下所示:
public function friends() {
return $this->belongsToMany('User', 'friends', 'user_id', 'friend_id')->where('status', 'accepted');
}
Run Code Online (Sandbox Code Playgroud)
这个朋友表行基本上是“向量”,其中 user1->status->user2 ,反之亦然(user2->status->user1 在另一行)。当 user1 决定不再与 user2 成为好友时,这 2 个好友行将被软删除。
问题是:当我像这样从控制器查询数据库时:
$friends = $user->friends;
Run Code Online (Sandbox Code Playgroud)
即使软删除的行也会显示在返回的集合中,尽管我希望这些行会从结果中隐藏,除非我使用 ->withTrashed()。
我怀疑belongsToMany()方法没有考虑数据透视表上的deleted_at字段。
有人遇到过类似的问题吗?我在这段关系中做错了什么吗?
非常感谢你的帮助!!!