关系满足Laravel口才时如何获取产品

时间:2018-11-10 22:26:17

标签: php laravel laravel-5 eloquent

我在数据库中具有以下关系,每个表都具有各自的相关模型。

enter image description here

我有一些产品,每个产品都有其配方,该配方由零个或多个元素和所需的数量组成。

在这之后,我有了一个仓库表,其中有该元素的当前库存,我想要获得的是配方中所需数量少于库存的产品。

如何获取此数据?我想在模型产品中创建一个范围,但是我不知道如何执行验证,因为它们在配方中可以是0或n个元素?

控制器

Product::with('recipe')
            ->enableElements()->get();

模型产品

public function scopeEnableElements($query)
{

}

1 个答案:

答案 0 :(得分:1)

您可以通过关联RecipeWareHouseelement_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();