Laravel Lucid在枢轴表

时间:2017-09-25 16:28:07

标签: php laravel eloquent pivot relationship

我有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,但我不知道如何到达那里。

1 个答案:

答案 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')
}