2017-02-20 2 views
0

Ich habe ein Modell Images, die Attribute wie hidden zieht, die immer eine 1 oder 0 sein wird.Where-Klausel für die Sammlung immer leer

habe ich versucht:

$all_images = Image::all(); 
var_dump($all_images->first()->hidden); 
dd([ 
    $all_images->where('hidden', "0")->count(), 
    $all_images->where('hidden', 0)->count(), 
    $all_images->where('hidden', 1)->count(), 
    $all_images->where('hidden', "1")->count() 
]); 


/* output 
sController.php:219:string '1' (length=1) 
array:4 [▼ 
0 => 0 
1 => 0 
2 => 0 
3 => 0 
]*/ 

aber es ist die Rückkehr immer 0.

Aber, wenn ich eine rohe Abfrage an die Datenbank SQLite:

17 rows returned in 0ms from: SELECT * FROM Bilder WHERE versteckt = '0';

Antwort

0

all wird die Abfrage ausführen und eine Collectio zurückgeben n. Statt

dd([ 
    Image::where('hidden', "0")->count(),   
    Image::where('hidden', 1)->count(),   
]); 

verwenden Wenn Sie eine Sammlung dann tun verwenden müssen:

dd([ 
    $allImages->filter(function ($value) { return $value->hidden == 0; })->count(), 
    $allImages->filter(function ($value) { return $value->hidden == 1; })->count() 
]); 

nicht sicher, ob die Sammlung, wo gut funktioniert die mit Objekten.

0

Sie rufen ->where(...) für eine Sammlung anstelle von Abfrage-Generator.

// This line will return a collection - https://laravel.com/docs/5.4/eloquent-collections 
$all_images = Image::all(); 

Wenn Sie nicht sichtbare und versteckte Bilder benötigen

// Collection does not have a method where(..) 

// To get images that are "hidden" do this: 
$hidden = Image::where('hidden', 0)->get(); // Again the result will be a collection 

// To get images that aren't hidden do this: 
$visible = Image::where('hidden', 1)->get(); // Will result in a collection 

Wenn Sie sichtbare und versteckte Bilder

// If you need both visible and hidden you could load them all at once: 
$images = Image::get(); 

// Then separate them with collection()->filter() - https://laravel.com/docs/5.4/collections#method-filter 

$hidden = $images->filter(function ($v, $k) { 
    return $images[$k]->hidden; 
}); 

$visible = $images->filter(function ($v, $k) { 
    return !$images[$k]->hidden; 
}); 
+2

Die Collection-Klasse hat eine where Methode; https://laravel.com/api/5.3/Illuminate/Support/Collection.html#method_where – sisve

+0

Oh. Tut mir leid, ich hatte keine Ahnung. Netter Fund. – devk