Как присоединиться к Eloquent и Query Builder в одном операторе запроса в laravel

У меня есть 2 запроса, которые нужно было присоединиться: 1-й — красноречивый, а 2-й — построитель запросов,

1-й запрос

$products = Product::all();

2-й запрос

$inventory = DB::table('product_warehouse')
->where('product_id', $product_id)
->where('warehouse_id', $warehouse_id)
->first();

Как объединить эти 2 запроса в красноречивый способ?

Это отношение многие ко многим (товар может находиться на нескольких складах) или один ко многим (один склад — много товаров)?

nakov 30.05.2019 08:04

Это будет один продукт на склад, поэтому один склад со многими продуктами

Martney Acha 30.05.2019 08:06
Стоит ли изучать 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 и хотите разрабатывать...
0
2
403
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Судя по вашему использованию построителя запросов, кажется, что у вас есть промежуточная таблица для хранения того, какой продукт для какого склада существует, но если это отношение «один ко многим», у вас не должно быть этой таблицы, вместо этого в вашей таблице продуктов у вас должен быть warehouse_id который будет ссылаться на id в таблице warehouses, как вы сказали, отношения один ко многим, а не многие ко многим.

Итак, в вашу модель Warehouse вы можете добавить:

public function products()
{
    return $this->hasMany(Product::class);
}

И в вашей модели Product:

public function warehouse()
{
    return $this->belongsTo(Warehouse::class);
}

В зависимости от имени вашей таблицы вам может потребоваться установить $table в вашей модели склада, чтобы он соответствовал этому:

protected $table = 'product_warehouse';

Тогда у вас есть много способов получить его, один из которых:

Warehouse::find($warehouse_id)->products;

// or 

Warehouse::with('products')->where('id', $warehouse_id)->get();

// to get the warehouse to which the product belongs to
Product::find($product_id)->warehouse;

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