繁体   English   中英

Laravel Eloquent 有很多变化,去除重复

[英]Laravel Eloquent has many through variation, remove duplicates

我一直在尝试让 Laravel Eloquent 的变体“有很多直通”关系起作用。

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

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

以下是表格的简化版本:

  • 发票
    • ID
  • 发票行
    • 发票编号
    • orderid
  • 命令
    • orderid

首先,我想使用默认的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关系,但要让 Orders 集合没有任何重复项?

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

不确定这是否可以在 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();
{

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM