Как использовать связь с параметром модели в методе контроллера? - PullRequest
2 голосов
/ 11 июля 2020

Обычно я могу использовать CustomerAddress::with(["province", "city", "district"]); для включения отношения к ответу, но я использую модель как параметры метода, как показано ниже:

public function show(CustomerAddress $address)
{
    return $address;
}

В настоящее время я могу получить запрос с отношением, используя:

public function show(CustomerAddress $address)
{
    $address = CustomerAddress::with(["province", "city", "postalcode", "district"])->where("id", $address->id)->firstOrFail();
    return $address;
}

Но я думаю, что это сделает двойной запрос, что плохо для производительности. Мое другое решение - не вызывать модель в параметрах, как показано ниже:

public function show($address_id)
{
    $address = CustomerAddress::with(["province", "city", "postalcode", "district"])->where("id", $address_id)->firstOrFail();

   return $address;
}

Но по какой-то причине мне нужно использовать модель CustomerAddress в параметрах метода. Есть ли какое-либо другое решение, чтобы снова включить отношение к $address без класса модели вызова?

Ответы [ 2 ]

1 голос
/ 11 июля 2020

У вас уже загружена модель, поэтому вам нужно только загрузить отношения. Это называется отложенная загрузка .

public function show(CustomerAddress $address)
{
    return $address->load("province", "city", "postalcode", "district");
}

Надеюсь, что это поможет :)

0 голосов
/ 11 июля 2020

Метод show, подобный этому

public function show(CustomerAddress $address) { 
return $address::with(["province", "city", "postalcode", "district"])->where("id", $address->id)->firstOrFail();
}

И вы можете использовать метод show и передать CustomerAddress в качестве аргумента

show(new CustomerAddress())
...