laravel 在 Eloquent 中将 withTrashed 与关系一起使用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25868025/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using withTrashed with relationships in Eloquent
提问by Vuk Stankovi?
Is there a way to use withTrashed
with relationships in Eloquent.
有没有办法withTrashed
在 Eloquent 中使用关系。
What I need is this. I have table and model Mark
and another table User
. User
has many Mark
and Mark
belongs to User
. So I defined this in Eloquent models.
我需要的是这个。我有桌子和模型Mark
以及另一张桌子User
。User
有很多Mark
,Mark
属于User
。所以我在 Eloquent 模型中定义了它。
Now I need to get an instance of Mark
that is soft deleted. This is not a problem if User
isn't soft deleted, but if both Mark
and User
are soft deleted, I get an error Trying to get property of non-object
, because
现在我需要得到一个Mark
软删除的实例。这不是一个问题,如果User
没有软删除,但如果同时Mark
和User
被软删除,我得到一个错误Trying to get property of non-object
,因为
$mark->user
won't return actual user, cause it is soft deleted.
不会返回实际用户,因为它被软删除。
Is there a way that I can do something like
有没有办法让我做类似的事情
$mark->withTrashed()->user
to get this related user even if it is deleted?
即使删除了这个相关用户,也要获取它吗?
回答by Jarek Tkaczyk
Depenging on your needs, you can define the relationship:
根据您的需要,您可以定义关系:
public function marks()
{
return $this->hasMany('Mark')->withTrashed();
}
// then just
$user->marks;
or use it on the fly:
或即时使用它:
$user->marks()->withTrashed()->get();
// or when lazy/eager loading
$user = User::with(['marks' => function ($q) {
$q->withTrashed();
}])->find($userId);
And in your pasted example it will be:
在您粘贴的示例中,它将是:
$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
回答by lowerends
You can do that like this:
你可以这样做:
$mark->withTrashed()->first()->user->withTrashed()->first()