Laravel 关系 orderBy

Laravel relationships orderBy

我在模型 OrderProduct 中有一个简单的 belongsToMany 关系:

public function statuses()
{
    return $this->belongsToMany(OrderProductStatusName::class, 'order_product_statuses')
        ->withPivot('created_at');
}

我想要一个产品的所有状态,但我希望它们在 created_at 上按枢轴 table 排序。 我试图这样做:

$orderProduct = OrderProduct::find($productId);

$statuses = $orderProduct->statuses->orderBy('pivot_created_at', 'DESC');

但是我有错误 500,方法 orderBy 不存在。我怎样才能做到这一点?

laravel中的关系可以用作属性或方法。如果关系用作 属性 那么 returns 一个集合。如果用作方法,则 returns 查询构建器对象,您可以链接方法,如 orderBy。所以在这种情况下你应该使用下面的代码:

$statuses = $orderProduct->statuses()->orderBy('pivot_created_at', 'DESC')->get();