【发布时间】:2019-07-17 23:57:28
【问题描述】:
我在RoadOffer 模型中有这种类型的范围:
public function scopeOfOfferRelationships($query){
return $query->with(["priceNegotiations", "driver.user", "roadTransport", "serviceProvider", "serviceProvider.company"]);
}
然后在我的代码中某处我有这样的代码:
$offer = Offer::where('id', $request->offer_id)->first();
$offer->status = 1;
$offer->save();
return $offer->query()->OfOfferRelationships()->where('id', $request->offer_id)->first();
我必须写 $offer->query()->OfOfferRelationships()->where('id', $request->offer_id)->first(); 才能从范围加载关系。有没有比使用query()更好的方法?
如果我使用load() 函数,我可以加载这些关系,但我想拥有这个scopeOfOfferRelationships,这是唯一的方法吗?
【问题讨论】:
-
一开始检索报价时为什么不使用范围?
Offer::OfOfferRelationships()->where('id', $request->offer_id)->first(); -
每个查询请求都需要这些吗?如果是这样,您可以将它们添加到模型中的 $with 变量中。这样,您将始终在没有范围的情况下加载这些关系。按范围加载关系并不是一个很好的实践。
-
如果我要更改
"priceNegotiations", "driver.user", "roadTransport", "serviceProvider", "serviceProvider.company"内部的内容怎么办?首先检索范围将不起作用。 -
什么意思?更改某些数组项或更改列出的模型之一?在任何情况下,您都可以简单地将所需的关系存储在一个数组中,并在需要时加载/查询它。毕竟我似乎没有得到这个问题。
标签: php laravel eloquent relationship