我正在尝试将以下数据库查询转换为使用Eloquent:
$orderitems = DB::table('order_items')
->join('orders', 'orders.id', '=', 'order_items.order_id')
->where('orders.status', 1)
->where('order_items.sku', $sku)
->select('order_items.*')
->get();
我尝试了以下操作:
$orderitems = Item::where('sku', $sku)
->with(['order' => function ($query) {
$query->where('status', 0);
}])
->get();
但它似乎带来了比预期更多的结果。通过使用DB::getQueryLog
可以看到order_items
查询未与订单表联接:
select * from `order_items` where `stock_code` = ? and `order_items`.`deleted_at` is null
我是否需要在订单项和订单之间建立新的关系,并在其中添加其他位置?
关系:
答案 0 :(得分:0)
解决方案是使用查询范围https://laravel.com/docs/5.7/eloquent#query-scopes
在控制器中:
$orderitems = Item::stock($sku)->paginate(10);
在订单项模型中:
public function scopeStock($query, $sku)
{
return $query->join('orders', function ($join) {
$join->on('orders.id', '=', 'order_items.order_id');
$join->where('orders.status', '=', 1);
})
->select('order_items.*', 'orders.order_date')
->where('order_items.sku', $sku);
}