[英]Laravel Lucid whereHas by latest column in pivot table
I have 3 tables : Orders ( id, name, surname, created_at and updated_at ), OrdersStatuses (order_id, order_status_name_id, created_at) and OrderStautsNames ( id and name ): I have orders model which has method like this: 我有3个表:订单(id,名称,姓氏,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();
}
I have problem with seraching all orders, where highest status id ( this info is in pivot table OrderStatuses, and I need name of this status which is in OrderStatusNames ) is like $statuses (this is an array with statuses ). 我在搜索所有订单时遇到问题,其中最高状态ID(此信息位于数据透视表OrderStatuses中,并且我需要此状态的名称位于OrderStatusNames中)就像$ statuses(这是一个具有statuss的数组)一样。 I started do like this:
我开始这样做:
$orders = Order::query();
$orders->whereHas('statuses', function($query) use ($statuses) {
$query->whereIn('order_status_name_id', $statuses);
});
But it return me orders with not latest status, but this query search me throught all statuses... . 但是它返回的不是最新状态的订单,而是此查询在所有状态下搜索我...。 Can i do this by latest status?
我可以按最新状态执行此操作吗? I tryed to use current_status but I don't know how to get there.
我尝试使用current_status,但不知道如何到达那里。
Add this relation to your Order Model 将此关系添加到您的订单模型中
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')
}
Then eager load it 然后渴望加载
$orders = Order::whereHas('lastStatus', function ($query) use ($statuses) {
$query->whereIn('OrderStautsNames.id', $statuses);
})->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.