Laravel雄辩地与垃圾关系

2022-08-30 16:18:58

我需要能够获得一个模型关系,包括其软删除的元素,但仅适用于这1个实例。我不想更改模型,以便每次使用关系时,它也会返回所有软删除的记录。

我怎样才能做到这一点?

用户模型

class User extends Authenticatable
{
  public function contacts(){
    return $this->hasMany('App\Contacts','user_id','id');
  }
}

控制器

$user = User::findOrFail($id);
//Need to be able to get the trashed contacts too, but only for this instance and in this function
$user->contacts->withTrashed(); //Something like this
return $user;

如何在我的控制器中仅获取这 1 次被丢弃的行?

谢谢


答案 1

您可以通过不同的方式使用方法。withTrashed

要将通话与您的关系相关联,您可以执行以下操作:

public function roles() {
    return $this->hasMany(Role::class)->withTrashed();
}

要在飞行中使用相同的方法:

$user->roles()->withTrashed()->get();

对于您的特殊方案:

$user->contacts()->withTrashed()->get();

答案 2

您还可以通过向方法添加子句来预先加载它们with()

$user = User
   ::with(['contacts' => fn($q) => $q->withTrashed()])
   ->findOrFail($id);

推荐