2014-06-18 19 views
6

Mam problem z zapętlaniem danych w kontrolerze (laravel 4). mój kod jest tak:laravel pętla foreach w kontrolerze

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

gdy chcę używać foreach pętli na skutek $ produktów z kodem tak:

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

wynik jest powracającego błędu niezdefiniowanej właściwości: Illuminate \ Database \ Eloquent \ Collection :: $ sku

tak, staram się trochę improwizować z tym kodem:

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

kod powrotu błędu tak: Invalid argument dostarczane do foreach()

jest tam ktoś, kto może mi pomóc rozwiązać ten problem?

+0

'whereOwnerAndStatus' nigdy wcześniej nie widział tej składni. Czy to działa? Gdzie w dokumentach to jest? –

+0

W jaki sposób przekazałeś '$ products' do swojego widoku? –

Odpowiedz

20

Hi, spowoduje to błąd:

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

ponieważ nie można zapętlić modelu z konkretną kolumną ($ product-> sku) z tabeli.
więc musisz pętla na całym modelu

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

wewnątrz pętli można odzyskać cokolwiek kolumnę, którą chcesz po prostu dodanie "-> [nazwa_kolumny]"

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

Have wielki dzień

0

Czy sku jest tylko właściwością modelu Product? Jeśli tak, to:

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

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

Czy jest to sku związek z innym modelem? Jeśli tak jest, to tak długo, jak twoja relacja jest poprawnie skonfigurowana, kod powinien działać.

0

W rzeczywistości Twój $product nie ma danych, ponieważ model Eloquent zwraca wartość NULL. Jest tak prawdopodobnie dlatego, że użyłeś whereOwnerAndStatus, co wydaje się błędne i gdyby były dane w $product, to nie działałoby w twoim pierwszym przykładzie, ponieważ get() zwraca kolekcję wielu modeli, ale tak nie jest. Drugi przykład powoduje błąd, ponieważ foreach nie dostał żadnych danych. Więc myślę, że powinno być coś takiego:

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

Ponadto można również upewnić się, czy $products ma dane:

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

Następnie w view:

foreach ($products as $product) { 
    // If Product has sku (collection object, probably related models) 
    foreach ($product->sku as $sku) { 
     // Code Here   
    } 
} 
Powiązane problemy