我在/path/to/the/file2.txt
/path/to/the/file3.txt
/path/to/the/file4.txt
模型中拥有这种范围:
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()
是唯一的方法吗?
答案 0 :(得分:0)
每当创建新记录时加载关系
我认为观察者是实现这一目标的最佳方法。
首先创建一个观察者要约模型。
php artisan make:observer OfferObserver
然后在AppServiceProvider
中注册OfferObserver
Offer::observe(OfferObserver::class)
在created()
方法中,加载商品关系。创建新记录时将触发此方法。另外,如果您要在更新模型后加载关系,请将下面的代码复制并粘贴到updated()
方法中
/**
* Handle the offer "created" event.
*
* @param Offer $offer
* @return void
*/
public function created(Offer $offer)
{
$offer->load([
"priceNegotiations",
"driver.user",
"roadTransport",
"serviceProvider",
"serviceProvider.company"
]);
}
仅在需要时加载关系
要约模型中的创建用于加载关系的方法。
public function loadRelations()
{
$this->load([
"priceNegotiations",
"driver.user",
"roadTransport",
"serviceProvider",
"serviceProvider.company"
]);
}
然后在需要时使用loadRelations()
方法加载关系
// update process
$offer->save();
$offer->loadRelations()
return $offer;