Объем загрузки Laravel после создания модели - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть этот тип области видимости внутри 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 это единственный способ?

1 Ответ

0 голосов
/ 24 февраля 2019

Загрузка отношений при создании новой записи

Я думаю, что наблюдатели лучше всего подходят для этого.

Сначала создайте модель предложения наблюдателя.

php artisan make:observer OfferObserver

Затем зарегистрируйте OfferObserver в AppServiceProvider

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;
...