У меня есть модель Images
который тянет атрибуты, такие как hidden
который всегда будет 1
или же 0
,
Я пробовал:
$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
]*/
но он всегда возвращает 0.
Но если я сделаю необработанный запрос к базе данных с использованием SQLite:
17 rows returned in 0ms from: SELECT * FROM
изображенийWHERE
скрытый= '0';
all
выполнит запрос и вернет коллекцию. Вместо этого используйте
dd([
Image::where('hidden', "0")->count(),
Image::where('hidden', 1)->count(),
]);
Если вы должны использовать коллекцию, выполните:
dd([
$allImages->filter(function ($value) { return $value->hidden == 0; })->count(),
$allImages->filter(function ($value) { return $value->hidden == 1; })->count()
]);
Не уверен, что коллекция хорошо работает с объектами.
Ты звонишь ->where(...)
на коллекции вместо построителя запросов.
// This line will return a collection - https://laravel.com/docs/5.4/eloquent-collections
$all_images = Image::all();
Если вам не нужны как видимые, так и скрытые изображения
// 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
Если вам нужны как видимые, так и скрытые изображения
// 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;
});