У меня есть 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 запроса в красноречивый способ?
Это будет один продукт на склад, поэтому один склад со многими продуктами






Судя по вашему использованию построителя запросов, кажется, что у вас есть промежуточная таблица для хранения того, какой продукт для какого склада существует, но если это отношение «один ко многим», у вас не должно быть этой таблицы, вместо этого в вашей таблице продуктов у вас должен быть 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;
Это отношение многие ко многим (товар может находиться на нескольких складах) или один ко многим (один склад — много товаров)?