Laravel雄辩的查询改进

时间:2018-02-14 08:41:51

标签: php laravel eloquent

目前我已经得到了这个雄辩的问题:

$products = Product::where('is_send', 1)->with(['articles.stock' => function($query) {
            $query->where('quantity', '>', 0);
        }])->get();

我想知道是否有更好的方法可以做到这一点?

澄清:

产品包含多个文章

文章 hasOne 股票

我需要article_ids 产品 is_send = 1产品文章的数量为{{ 1}}。

1 个答案:

答案 0 :(得分:3)

如果您经常进行此查询,那么您可以创建一个范围,这是一个示例:

产品型号代码

public function scopeltStockQuantity($query, $quantity) {
    return $query->with(['articles.stock' => function($innerQuery) use ($quantity) {
        $innerQuery->where('quantity', '>', $quantity);
    }]);
}

然后你可以这样做:

$products = Product::where('is_send', 1)->ltStockQuantity(0)->get();

或者为了进一步分离代码,您可以执行以下操作:

股票型号代码

public function scopeltQuantity($query, $quantity) {
    return $query->where('quantity', '>', $quantity);
}

产品型号代码

public function scopeltStockQuantity($query, $quantity) {
    return $query->with(['articles.stock' => function($innerQuery) use ($quantity) {
        $innerQuery->ltQuantity($quantity);
    }]);
}