Продукты запросов Foreach - PullRequest
0 голосов
/ 26 мая 2020

Я хочу иметь список продуктов, у которых есть категории идентификаторов в качестве внешнего ключа, но я не хочу получать запросы для каждого продукта, есть ли более разумный способ сделать это? Текущий код работает, но я не думаю, что делаю это правильно, следуйте коду:

        if($products){
            $categories = [];
            foreach($products as $product){
                $categories[] = $product->categories()->first();
            }
            return view('products',[
                'products' => $products,
                'categories' => $categories
            ]);
        }```


Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вы можете использовать Активную загрузку, чтобы загружать категории каждого продукта, не просматривая каждый из них:

  1. Загрузить все категории определенного $products
     if($products){
            $products->with('categories')->get();

            return view('products',$products);
        }
Категории загрузки определенного $products с дополнительными ограничениями:
     if($products){
            $products->with(['categories' => function ($query) {
            $query->where('...');
            }])->get();;

            return view('products',$products);
        }
1 голос
/ 26 мая 2020

Когда вы делаете это так, $categories[] = $product->categories()->first();

$product->categories() создает новый экземпляр построителя запросов.

Если вы хотите получить доступ к отношению с 1 запросом, вам необходимо назовите его методом

$product->categories таким образом вы получите коллекцию всех категорий.

Если вы хотите, чтобы все категории для определенного c продукта, сделайте это так:

$product = Product::find(1); -> это всего лишь пример получения продукта с ID 1.

Тогда вам нужны все категории этого продукта.

$product->categories -> Categories is ваши отношения в модели продукта, мы называем его METHOD, а не FUNCTION.

            return view('products',[
                'product' => $product,
                'categories' => $product->categories
            ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...