web-dev-qa-db-fra.com

boucle laravel foreach dans le contrôleur

j'ai un problème avec les données en boucle dans le contrôleur (laravel 4). mon code est comme ça:

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

quand je veux utiliser foreach pour boucler pour un résultat de produit $ avec un code comme celui-ci:

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

le résultat renvoie une erreur Propriété non définie: Illuminate\Database\Eloquent\Collection :: $ sku

alors, j'essaie d'improviser un peu avec ce code:

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

le code renvoyant une erreur comme ceci: Argument non valide fourni pour foreach ()  

y a-t-il quelqu'un qui pourrait m'aider à résoudre ce problème?

9
thefalasifas

Salut, cela jettera une erreur:

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

Parce que vous ne pouvez pas boucler un modèle avec une colonne spécifique ($ produit-> sku) de la table.
Vous devez donc boucler sur le modèle entier:

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

Dans la boucle, vous pouvez récupérer la colonne de votre choix en ajoutant simplement "-> [nom_colonne]".

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

Passez une bonne journée

27
alex t

sku est-il simplement une propriété du modèle Product? Si c'est le cas:

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

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

Ou sku est-il une relation avec un autre modèle? Si tel est le cas, votre code devrait fonctionner tant que votre relation est configurée correctement.

0
Jake Wilson

En réalité, votre $product ne contient aucune donnée car le modèle Eloquent renvoie NULL. C'est probablement parce que vous avez utilisé whereOwnerAndStatus qui semble erroné et s'il y avait des données dans $product, cela ne fonctionnerait pas dans votre premier exemple car get() renvoie une collection de plusieurs modèles, mais ce n'est pas le cas. Le deuxième exemple génère une erreur car foreach n'a pas reçu de données. Donc, je pense que ça devrait être quelque chose comme ça:

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

De plus, vous pouvez également vous assurer que si $products a des données:

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

Puis dans la view:

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