有没有办法在Eloquent中使用withTrashed
关系。
我需要的是这个。我有表格和模型Mark
以及另一个表格User
。 User
有许多Mark
,Mark
属于User
。所以我在Eloquent模型中定义了这个。
现在我需要获得一个被软删除的Mark
实例。如果User
未被软删除,这不是问题,但如果Mark
和User
都被软删除,我会收到错误Trying to get property of non-object
,因为
$mark->user
不会返回实际用户,因为它被软删除。
有没有办法让我可以做类似
的事情$mark->withTrashed()->user
获取此相关用户即使被删除了吗?
答案 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()