2016-09-08 2 views
1

У меня есть следующие функции в контроллере:Laravel 5. Как перебрать красноречивые свойства

public function getProduct() 
{ 
return Product::join('shopping_list_items', 'products.id', '=', 'shopping_list_items.product_id') 
->join('shop_lists', 'shop_lists.id', '=', 'shopping_list_items.shopping_list_id') 
->select('products.product_name', 'products.id') 
->where('shop_lists.id', $this->id); 
} 

Этот код с точкой зрения отлично работает и показывает название продукта:

{{$shoppinglists->getProduct()->first()->product_name}} 

Но я не могу» t через него:

@foreach($shoppinglists->getProduct() as $sh) 
{{$sh->product_name}}<br> 
@endforeach 

Хотя и не содержит ошибок.

+1

после где, добавить -> получить(); – Carlos

+0

Спасибо! Не могли бы вы объяснить разницу между объектами и без get()? –

+0

Разница в том, что без него это не вещь. -> получить(); говорит ему выполнить запрос и вернуть объект. – Lynne

ответ

1

Ваш метод getProduct() возвращает экземпляр Database Builder, а не коллекцию, поэтому вы можете сделать ->first(), что в основном делает лимит извлечения 1 и получает объект.

Итак, вам нужно позвонить ->get() или, возможно, paginate(), чтобы на самом деле сделать выборку данных в базу данных и получить коллекцию объектов.

Таким образом, нижняя линия, просто сделать:

@foreach($shoppinglists->getProduct()->get() as $sh) 
    {{$sh->product_name}}<br> 
@endforeach 
1

Как пояснил @Carlos, вам нужно использовать get() для получения значений из базы данных.

public function getProduct() 
{ 
return Product::join('shopping_list_items', 'products.id', '=', 'shopping_list_items.product_id') 

->join('shop_lists', 'shop_lists.id', '=', 'shopping_list_items.shopping_list_id') 

->select('products.product_name', 'products.id') 

->where('shop_lists.id', $this->id) 
->get(); 
} 

Это вернет вам объект JSON. Если вам нужен выход массива из этого запроса, используйте pluck('filed name'); вместо get(); На ваш взгляд, использовать

@foreach($shoppinglists as $sh) 
{{$sh->product_name}}<br> 
@endforeach