控制器中的拉拉维尔前循环

2022-08-30 19:35:34

我有一个关于在控制器中循环数据的问题(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
}

结果返回错误 Undefined 属性:Illuminate\Database\Eloquent\Collection::$sku

所以,我试着用这个代码即兴发挥一下:

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

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

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


答案 1

这将引发错误:

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

因为不能从表中循环具有特定列 () 的模型。
因此,您必须循环访问整个模型:$product->sku

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

在循环中,您可以检索要添加的任何列->[column_name]

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

答案 2

实际上,您没有数据,因为模型返回 NULL。这可能是因为你使用了似乎错误的,如果其中有数据,那么它在你的第一个示例中就不起作用了,因为返回了多个模型的集合,但事实并非如此。第二个示例由于未获取任何数据而引发错误。所以我认为它应该是这样的:$productEloquentwhereOwnerAndStatus$productget()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        
    }
}

推荐