web-dev-qa-db-ja.com

laravelコントローラのforeachループ

コントローラーでデータをループする問題があります(laravel 4)。私のコードは次のようなものです:

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

次のようなコードでforproductを使用して$ product結果をループする場合:

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

結果はエラーを返しています未定義プロパティ:Illuminate\Database\Eloquent\Collection :: $ sk

だから、私はこのコードで少し即興しようとしています:

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

次のようなエラーを返すコード:foreach()に指定された無効な引数

これを解決するのを手伝ってくれる人はいますか?

12
thefalasifas

こんにちは、これはエラーをスローします:

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

特定の列でモデルをループできないため($ product-> sku)テーブルから。
したがって、モデル全体をループする必要があります。

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

ループ内では、「-> [column_name]」を追加するだけで、必要な列を取得できます。

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

すてきな一日を

33
alex t

EloquentモデルはNULLを返すため、実際には_$product_にはデータがありません。おそらく間違っていると思われるwhereOwnerAndStatusを使用し、_$product_にデータがあった場合、get()が複数のモデルのコレクションを返すため、最初の例では機能しませんが、そうではありません。 2番目の例は、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        
    }
}
_
1
The Alpha

ビュー(ブレードテンプレート):ループ内で、探している列を取得できます。

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

skuProductモデルの単なるプロパティですか?その場合:

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

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

または、skuは別のモデルとの関係ですか?その場合、関係が適切にセットアップされている限り、コードは機能します。

0
Jake Wilson