[英]Laravel Eloquent has many through variation, remove duplicates
我一直在尝试让 Laravel Eloquent 的变体“有很多直通”关系起作用。
我有 3 个模型:Invoice、InvoiceLine 和 Order; 我想通过其 InvoiceLines 检索一组不同的给定发票的所有订单。
Invoice 有 1 个或多个 InvoiceLines; InvoiceLine 恰好有 1 个 Invoice; InvoiceLine 有零个或 1 个订单; 订单有零个或多个发票行
以下是表格的简化版本:
首先,我想使用默认的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.