2016-10-27 4 views
0

У меня есть этот маршрут вызов:Нетерпеливая Нагрузка на автогенерируемом аргументе в Laravel

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

Так что, если я вхожу /products/438/edit он называет свой метод редактирования на контроллере, то есть что-то вроде этого:

public function edit(Product $product){} 

где $product есть, верно, мой SELECT * FROM products WHERE id = 438

теперь мой вопрос, что, если я хочу, чтобы я хотел бы получить отношение, например, цены()

Я пробовал:

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

и

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

, но без успеха. Благодаря

ответ

0

Вы можете загрузить отношения к уже существующей модели или коллекции с помощью load():

$product->load('prices')

+0

Спасибо, это решение. –

0

Когда вы делаете 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 
+0

Спасибо за вашу поддержку. Конечно, это работает, но зачем использовать инъекцию, если я снова буду использовать что-то вроде $ product-> где ('id', $ id)? Я мог бы просто передать $ id и сделать Product :: find ($ id) -> с ('prices'), если бы захотел. –

+0

Включение зависимостей - это лишь один из многих способов использования класса модели. Когда вы передаете идентификатор, вам все равно нужно получить данные из БД, потому что Laravel не делает это автоматически. –

+0

Когда я передаю только идентификатор, мне нужно получить данные, когда я ввожу продукт Product Product, которого нет. –

Смежные вопросы