目前我已经得到了这个雄辩的问题:
$products = Product::where('is_send', 1)->with(['articles.stock' => function($query) {
$query->where('quantity', '>', 0);
}])->get();
我想知道是否有更好的方法可以做到这一点?
澄清:
产品包含多个文章
文章 hasOne 股票
我需要article_ids
产品 is_send = 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);
}]);
}