在控制器中的laravel foreach循环

时间:2014-06-18 05:08:16

标签: php laravel foreach

我在控制器(laravel 4)中循环数据时遇到问题。我的代码是这样的:

$owner = Input::get('owner');
$count = Input::get('count');
$product = Product::whereOwnerAndStatus($owner, 0)->take($count)->get();

当我想使用foreach循环获取$ product结果时,代码如下:

foreach ($product->sku as $sku) {
    // Code Here
}

结果是返回错误 未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ sku

所以,我尝试用这段代码即兴创作:

foreach ($product as $items) {
    foreach ($items->sku as $sku) {
        // Code Here        
    }
}

代码返回错误如下: 为foreach()提供的参数无效

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:32)

嗨,这会抛出一个错误:

foreach ($product->sku as $sku){ 
// Code Here
}

因为您无法从表中循环具有特定列( $ product-> sku )的模型。
所以你必须循环整个模型:

foreach ($product as $p) {
// code
}

在循环内部,您可以检索您想要添加的任何列“ - > [column_name]”

foreach ($product as $p) {
echo $p->sku;
}

祝你有美好的一天

答案 1 :(得分:1)

实际上您的$product没有数据,因为Eloquent模型返回NULL。这可能是因为你使用了whereOwnerAndStatus这似乎是错误的,如果$product中有数据,那么它在你的第一个例子中不起作用,因为get()返回多个模型的集合,但这不是案子。第二个示例引发错误,因为foreach没有获得任何数据。所以我认为它应该是这样的:

$owner = Input::get('owner');
$count = Input::get('count');
$products = Product::whereOwner($owner, 0)->take($count)->get();

此外,您还可以确定$products是否包含数据:

if($product) {
    return View:make('viewname')->with('products', $products);
}

然后在view

foreach ($products as $product) {
    // If Product has sku (collection object, probably related models)
    foreach ($product->sku as $sku) {
        // Code Here        
    }
}

答案 2 :(得分:0)

sku只是Product模型的属性吗?如果是这样的话:

$products = Product::whereOwnerAndStatus($owner, 0)->take($count)->get();

foreach ($products as $product ) {
  // Access $product->sku here...
}

或者是sku与另一个模特的关系?如果是这种情况,那么,只要您的关系设置正确,您的代码就可以正常工作。

答案 3 :(得分:0)

视图(刀片模板):在循环内,您可以检索要查找的任何列

 @foreach ($products as $product)
   {{$product->sku}}
 @endforeach