在Eloquent中使用withTrashed和关系

时间:2014-09-16 11:49:44

标签: php laravel eloquent

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

我需要的是这个。我有表格和模型Mark以及另一个表格UserUser有许多MarkMark属于User。所以我在Eloquent模型中定义了这个。

现在我需要获得一个被软删除的Mark实例。如果User未被软删除,这不是问题,但如果MarkUser都被软删除,我会收到错误Trying to get property of non-object,因为

$mark->user

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

有没有办法让我可以做类似

的事情
$mark->withTrashed()->user

获取此相关用户即使被删除了吗?

2 个答案:

答案 0 :(得分:47)

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

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

答案 1 :(得分:3)

你可以这样做:

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