创建模型后的laravel加载范围

时间:2019-02-24 11:59:28

标签: php laravel eloquent relationship

我在/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()是唯一的方法吗?

1 个答案:

答案 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;