wake-up-neo.com

laravel foreach Schleife im Controller

ich habe ein Problem mit dem Schleifen von Daten im Controller (Laravel 4). Mein Code lautet wie folgt:

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

wenn ich foreach verwenden möchte, um für $ product result mit Code wie folgt zu schleifen:

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

das Ergebnis liefert error Undefined-Eigenschaft: Illuminate\Database\Eloquent\Collection :: $ sku

also versuche ich mit diesem code ein wenig zu improvisieren:

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

der Fehlercode gibt Folgendes zurück: Ungültiges Argument für foreach ()  

gibt es jemanden, der mir helfen könnte, das zu lösen?

9
thefalasifas

Hi, dies wird einen Fehler auslösen:

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

weil Sie ein Modell nicht mit einer bestimmten Spalte schleifen können ($ product-> sku) vom Tisch.
Sie müssen also das gesamte Modell in einer Schleife durchlaufen:

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

Innerhalb der Schleife können Sie die gewünschte Spalte abrufen, indem Sie einfach "-> [Spaltenname]" .__ hinzufügen.

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

Ich wünsche ihnen einen wunderbaren Tag

27
alex t

Die Ansicht (Klingenvorlage): Innerhalb der Schleife können Sie jede Spalte abrufen, nach der Sie suchen

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

Ist sku nur eine Eigenschaft des Product-Modells? Wenn ja:

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

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

Oder ist sku eine Beziehung zu einem anderen Modell? Wenn dies der Fall ist, sollte der Code funktionieren, solange Ihre Beziehung ordnungsgemäß eingerichtet ist.

0
Jake Wilson

Ihr $product enthält tatsächlich keine Daten, da das Eloquent-Modell NULL zurückgibt. Dies ist wahrscheinlich darauf zurückzuführen, dass Sie whereOwnerAndStatus verwendet haben. Dies scheint falsch zu sein. Wenn $product Daten enthält, funktioniert es in Ihrem ersten Beispiel nicht, da get() eine Sammlung mehrerer Modelle zurückgibt. Dies ist jedoch nicht der Fall. Das zweite Beispiel gibt einen Fehler aus, da foreach keine Daten erhalten hat. Ich denke, es sollte so etwas sein:

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

Sie können auch sicherstellen, dass $products Daten enthält:

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

Dann in der view:

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