你好,我刚刚注意到了softDelete的一个奇怪行为。基本上,当我查询相关模型集时,Eloquent返回一个包含软删除行的集合。
我一直遵循4.2指南中关于使用Traits进行软删除的用法,并且只要获取/删除/恢复/强制删除我的模型,我的代码就能正常工作。但问题是与关系有关。
考虑以下情况: 我有一个用户模型,它具有belongToMany友谊关系,其中友谊状态可以被接受/挂起/请求/阻止,如下所示:
public function friends() {
return $this->belongsToMany('User', 'friends', 'user_id', 'friend_id')->where('status', 'accepted');
}
这个朋友表中的行基本上是“向量”,其中user1->状态->user2,反之亦然(user2->状态->user1在另一行中)。 当user1决定不再与user2交朋友时,这两个朋友行被软删除。
问题在于:当我像这样从控制器查询数据库时:
$friends = $user->friends;
即使软删除的行应该被隐藏,但它们仍然出现在返回的集合中,除非我使用 ->withTrashed()。
我怀疑 belongsToMany() 方法没有考虑到关系表上的 deleted_at 字段。
有人遇到类似的问题吗?我在这个关系中做错了什么吗?
非常感谢您的帮助!