Laravel Eloquent 有很多变化,删除重复项

Laravel Eloquent has many through variation, remove duplicates

我一直在尝试让 Laravel Eloquent 'has many through' 关系的变体起作用。

我有 3 个模型:Invoice、InvoiceLine 和 Order;我想通过其 InvoiceLines 检索一组不同的给定发票的所有订单。

Invoice 有 1 个或多个 InvoiceLine; InvoiceLine 恰好有 1 个 Invoice; InvoiceLine 有零个或 1 个订单;订单有零个或多个 InvoiceLines

以下是表格的简化版本:

首先,我想使用默认的 Has Many Through 关系,但这行不通,因为我的表不同:

然后我想使用多对多(belongsToMany)关系:

class Invoice {
    public function orders(): BelongsToMany {
        return $this->belongsToMany(
            Order::class,
            'invoice_line',
            'invoice_id',
            'orderid'
        );
    }
}

以上代码适用于获取所有订单,但列表中充满了重复项。

我如何使用 Laravel 5.6 Eloquent ORM 设置此 Invoice --> Order 关系,但要让订单集合没有任何重复项?

如果这在 Eloquent ORM 关系定义中是不可能的,那么我如何以不同的方式查询这些模型,以便我仍然有一个面向关系对象的发票集合及其不同的相关集合订单?

不确定这是否可以在 Eloquent 生成器中完成。也许是这样的:

public function orders(): BelongsToMany {
    return $this->belongsToMany(
        Order::class,
        'invoice_line',
        'invoice_id',
        'orderid'
    )->distinct();
}

但你也可以这样做:

// class Invoice
public function getRelatedOrders ()
{
    $orderIdList = $this->invoiceLines->pluck('order_id')->unique();
    return Order::whereIn('id', $orderIdList)->get();
{