Foreach с красноречием в laravel

Я пытаюсь просмотреть элементы, используя красноречие в 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);

Примечание. У меня есть данные в моей базе данных.

Вы можете проверить мой обновленный ответ на основе условия $product->status == 1

bhavinjr 02.04.2019 10:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
581
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

В Laravel $store->products() вы получаете доступ к экземпляру QueryBuilder, вместо этого есть способ Laravel сделать $store->products, который автоматически загружает QueryBuilder и извлекает коллекцию, а в дальнейшем его легко оптимизировать.

Ответ принят как подходящий

Это потому, что $store->products() возвращает красноречивую коллекцию, которая еще не содержит данных из базы данных. Вместо этого вам нужно сделать $store->products.

Если вам нужно получить количество из базы данных, используйте

$store->products()->where('status', 1)->count()

Это то же самое, что и с ownToMany()? Потому что иногда взаимосвязь (например, $store->products()) работает. Я смущен этим.

Jie 02.04.2019 09:49

@Jonjie одинаково для всех отношений в Laravel

Advaith 03.04.2019 10:04

@Jonjie есть обновленный ответ, чтобы получить количество условных продуктов.

Advaith 05.04.2019 06:32

С помощью функциональной аннотации (т. е. 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();

ссылка: без учета отношений

Другие вопросы по теме