我有3个表:Orders(id,name,surname,created_at和updated_at),OrdersStatuses(order_id,order_status_name_id,created_at)和OrderStautsNames(id和name): 我有订单模型,其方法如下:
protected $appends = ['actual_status'];
public function orderProducts()
{
return $this->hasMany(OrderProduct::class);
}
public function statuses()
{
return $this->belongsToMany(OrderStatusName::class, 'order_statuses')
->withPivot('created_at');
}
public function getActualStatusAttribute()
{
return $this->statuses()->latest('set_at')->first();
}
我在搜索所有订单时遇到问题,其中最高状态ID(此信息在数据透视表OrderStatuses中,我需要此状态的名称在OrderStatusNames中)就像$ status(这是一个包含状态的数组)。我开始这样做:
$orders = Order::query();
$orders->whereHas('statuses', function($query) use ($statuses) {
$query->whereIn('order_status_name_id', $statuses);
});
但是它返回了我没有最新状态的订单,但是此查询会搜索我所有的状态....我可以按最新状态这样做吗?我试着使用current_status,但我不知道如何到达那里。
答案 0 :(得分:0)
将此关系添加到订单模型
.a
然后急切加载
public function lastStatus()
{
return $this->hasOne(OrderStatusName::class)->select('OrderStautsNames.*', 'order_statuses.order_id', DB::raw('MAX(order_statuses.set_at) as lastOrder'))->join('order_statuses', 'order_statuses.order_status_name_id', '=', 'OrderStautsNames.id')
}