我在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
虽然没有显示任何错误。
答案 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