gpt4 book ai didi

php - Laravel 4.2 在 BelongsToMany 结果上返回软删除

转载 作者:行者123 更新时间:2023-12-03 21:34:20 24 4
gpt4 key购买 nike

您好,我刚刚注意到 softDelete 的一种奇怪行为。基本上,当我查询一组相关的模型时,Eloquent 会返回一个包含软删除行的集合。

我一直在遵循有关 softdelete 特征使用的 4.2 指南,只要我获取/删除/恢复/强制删除我的模型,我的代码就可以正常工作。这个问题是由关系引发的。

考虑这个场景:
我有一个用户模型,它有一个belongToMany 友谊关系,其中友谊状态可以被接受/待定/请求/阻止,如下所示:

public function friends() {
return $this->belongsToMany('User', 'friends', 'user_id', 'friend_id')->where('status', 'accepted');
}

这个 friend 表行基本上是“向量”,其中 user1->status->user2 反之亦然(user2->status->user1 在另一行)。
当用户 1 决定不再与用户 2 成为好友时,将软删除 2 个好友行。

这是问题:当我像这样从 Controller 查询数据库时:
$friends = $user->friends;

即使是软删除的行也会显示在返回的集合中,尽管我希望这些行不会出现在结果中,除非我使用 ->withTrashed()。

我怀疑belongsToMany() 方法没有考虑数据透视表上的deleted_at 字段。

有没有人遇到过类似的问题?我在这种关系上做错了什么吗?

非常感谢你的帮助!!!

最佳答案

我假设你有一个 Friend使用 SoftDeletingTrait 的模型.

软删除是模型的一个功能。但是,BelongsToMany 关系不需要为数据透视表定义模型,因此它不会考虑模型,即使它存在。它适用于基表。由于关系不知道连接到数据透视表的任何模型,因此它不知道数据透视表上的软删除。

您当前的解决方案可能没问题,但您可能需要考虑使用 wherePivot反而:

->wherePivot('deleted_at', null)
// or
->wherePivot(Friend::getDeletedAtColumn(), null)

这样,软删除子句用于任何其他内部关系处理,这些处理最终会专门为数据透视表构建新查询(例如同步、分离、更新现有数据透视表等)。

关于php - Laravel 4.2 在 BelongsToMany 结果上返回软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28395585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com