Я пытаюсь просмотреть элементы, используя красноречие в laravel, но получаю 0. Пожалуйста, смотрите мой код ниже.
Модель
Class Store{
public function products(){
return $this->hasMany('App\Product');
}
}
Контроллер
$products_count = 0;
foreach($store->products() as $product)
{
if ($product->status == 1)
{
$products_count++;
}
}
dd($products_count);
Примечание. У меня есть данные в моей базе данных.






В Laravel $store->products() вы получаете доступ к экземпляру QueryBuilder, вместо этого есть способ Laravel сделать $store->products, который автоматически загружает QueryBuilder и извлекает коллекцию, а в дальнейшем его легко оптимизировать.
Это потому, что $store->products() возвращает красноречивую коллекцию, которая еще не содержит данных из базы данных. Вместо этого вам нужно сделать $store->products.
Если вам нужно получить количество из базы данных, используйте
$store->products()->where('status', 1)->count()
Это то же самое, что и с ownToMany()? Потому что иногда взаимосвязь (например, $store->products()) работает. Я смущен этим.
@Jonjie одинаково для всех отношений в Laravel
@Jonjie есть обновленный ответ, чтобы получить количество условных продуктов.
С помощью функциональной аннотации (т. е. products()) вы извлекаете \Illuminate\Database\Eloquent\Builder-экземпляр, а не реальную коллекцию Eloquent.
Вместо этого вам придется использовать $store->products — тогда вы получите соответствующую коллекцию.
Вы также можете использовать метод withCount что-то вроде этого
Контроллер
$stores = Store::withCount('products')->get();
or
$store = Store::where('id', 1)->withCount('products')->first();
WithCount по конкретному статусу
$stores = Store::withCount(['products' => function ($query) {
$query->where('status', 1);
}
])
->get();
ссылка: без учета отношений
Вы можете проверить мой обновленный ответ на основе условия
$product->status == 1