Laravel 5.如何迭代Eloquent属性

时间:2016-09-08 15:09:59

标签: php laravel eloquent

我在Controller中有以下功能:

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}}

但我无法像这样循环:

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

虽然没有显示任何错误。

2 个答案:

答案 0 :(得分:1)

您的getProduct()方法返回数据库构建器的实例,而不是集合,这就是您可以执行->first()的原因,它基本上会执行获取限制1并获取对象。

因此,您需要调用->get()paginate()来实际获取数据到数据库并获取对象集合。

所以,底线,就是这样做:

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

答案 1 :(得分: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