我有2条需要加入的查询,第一条是雄辩的,第二条是查询生成器,
第一个查询
$products = Product::all();
第二次查询
$inventory = DB::table('product_warehouse')
->where('product_id', $product_id)
->where('warehouse_id', $warehouse_id)
->first();
如何将这两个查询合并成通俗的方式?
答案 0 :(得分:2)
从查询生成器的用法来看,似乎您有一个中间表来存储仓库存在的产品,但是如果是一对多关系,则不应该具有该表,而应该在products表中有一个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;