пункт where для коллекции всегда возвращается пустым

У меня есть модель 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';

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()
]);

Не уверен, что коллекция хорошо работает с объектами.

0

Другие решения

Ты звонишь ->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;
});
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector