在控制器中的laravel foreach循环

问题描述 投票:12回答:4

我有关于在控制器中循环数据的问题(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()提供的参数无效

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

php laravel foreach
4个回答
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
投票

实际上你的$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        
    }
}

0
投票

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

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

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

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


0
投票

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

 @foreach ($products as $product)
   {{$product->sku}}
 @endforeach
© www.soinside.com 2019 - 2024. All rights reserved.