猿问

如何在控制器方法中使用与模型参数的关系?

通常我可以用来 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无需再次调用模型类?


动漫人物
浏览 122回答 2
2回答

哈士奇WWW

您已经加载了模型,因此只需加载关系即可。这称为延迟预加载。public function show(CustomerAddress $address){     return $address->load("province", "city", "postalcode", "district"); }希望有帮助:)

呼如林

显示方法是这样的public function show(CustomerAddress $address) {  return $address::with(["province", "city", "postalcode", "district"])->where("id", $address->id)->firstOrFail(); }您可以使用 show 方法并传递CustomerAddressas 参数show(new CustomerAddress())
随时随地看视频慕课网APP
我要回答