使用与 Eloquent 中的关系一起使用

2022-08-30 15:50:23

有没有办法在Eloquent中使用关系。withTrashed

我需要的是这个。我有桌子和模型以及另一张桌子。 有很多,属于 .所以我在雄辩的模型中定义了这一点。MarkUserUserMarkMarkUser

现在我需要得到一个软删除的实例。如果不是软删除,这不是问题,但是如果两者都软删除,我得到一个错误,因为MarkUserMarkUserTrying to get property of non-object

$mark->user

不会返回实际用户,因为它被软删除。

有没有办法让我做这样的事情

$mark->withTrashed()->user

即使删除了此相关用户,也要获取此相关用户?


答案 1

根据您的需要,您可以定义关系:

public function marks()
{
  return $this->hasMany('Mark')->withTrashed();
}

// then just
$user->marks;

或动态使用它:

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

// or when lazy/eager loading
$user = User::with(['marks' => function ($q) {
   $q->withTrashed();
}])->find($userId);

那么你的情况会变成:

$mark->user() // get relation object first
   ->withTrashed() // apply withTrashed on the relation query
   ->first();  // fetch the user

// alternatively you use getResults relation method
$mark->user()
   ->withTrashed()
   ->getResults();  // returns single model for belongsTo

$user->marks()->withTrashed()
   ->getResults(); // returns collection for hasMany

答案 2

你可以这样做:

$mark->withTrashed()->first()->user->withTrashed()->first()

推荐