我在数据库中具有以下关系,每个表都具有各自的相关模型。
我有一些产品,每个产品都有其配方,该配方由零个或多个元素和所需的数量组成。
在这之后,我有了一个仓库表,其中有该元素的当前库存,我想要获得的是配方中所需数量少于库存的产品。
如何获取此数据?我想在模型产品中创建一个范围,但是我不知道如何执行验证,因为它们在配方中可以是0或n个元素?
控制器
Product::with('recipe')
->enableElements()->get();
模型产品
public function scopeEnableElements($query)
{
}
答案 0 :(得分:1)
您可以通过关联Recipe
从WareHouse
到element_id
进行查询。
食谱模型:
public function warehouses()
{
return $this->hasMany(\App\Models\WareHouse::class, 'element_id', 'element_id');
}
仓库模型:
public function recipes()
{
return $this->hasMany(\App\Models\Recipe::class, 'element_id', 'element_id');
}
控制器代码:
Product::whereHas('recipes', function($q) {
$q->whereHas('warehouses', function($query) {
$query->whereRaw('WareHouse.stock > Recipe.count'); // use table names here, not model names
});
})->get();
如果要在Recipe模型中使用范围,请执行以下操作:
public function scopeEnableElements($query)
{
$query->whereHas('warehouses', function($query2) {
$query2->whereRaw('WareHouse.stock > Recipe.count'); // use table names here, not model names
});
}
然后在您的控制器中:
Product::whereHas('recipes', function($query) {
$query->enableElements();
})->get();