在 Laravel 中自动生成参数的预加载

Eager Loading on autogenerated argument in Laravel

我有这条路线电话:

Route::resource('products', 'ProductController', ['except' => ['show']]);

所以如果我输入 /products/438/edit 它会在控制器上调用我的编辑方法,就像这样:

 public function edit(Product $product){}

其中 $product 正确地是我的 SELECT * FROM products WHERE id = 438

现在我的问题是,如果我想加载像 prices() 这样的关系怎么办

我试过:

$product = $product->with('prices');

$product = Product::find($product->id)->with('prices')

但没有成功。 谢谢

您可以使用 load():

将关系加载到已经存在的模型或集合中

$product->load('prices')

当您执行 Product $product 和使用资源控制器时,您只是在注入 Product 模型。因此,将函数更改为:

public function edit(Product $product, $id)

您可以使用 with() 方法预先加载关系:

$productData = $product->where('id', $id)->with('prices')->first();

然后您就可以通过以下方式获取价格:

@foreach ($productData->prices as $price)
    {{ $price->sum }}
@endforeach