[英]Laravel relationship combine column to comma separated string
在我的 Laravel 应用程序中,我有 3 个表,分别称为customers
、 packages
和customer_packages
。 我需要用comma separated
字符串显示每个客户的每个package
。
例如:
# | Customer | Package(s)
------------------------------
1 | Customer - 1 | 123, 456, 789, ...
2 | Customer - 2 | 456, 789, ...
关系:
customers -> hasMany -> customer_packages -> hasOne -> packages
客户.php
public function customerPackage()
{
return $this->hasMany(CustomerPackage::class);
}
public function index()
{
return self::select([
'id',
...
])->with([
'customerPackage:id,customer_id,package_id,package_amount',
'customerPackage.package:id,title',
])
->where("status", \Common::STATUS_ACTIVE)
->get();
}
客户包.php
public function customer()
{
return $this->belongsTo(Customer::class);
}
public function package()
{
return $this->belongsTo(Package::class);
}
一切正常。 但是,为了获得所需的(逗号分隔)输出,我必须在包上运行循环并生成输出。
像这样的东西:
@foreach($customers as $customer)
<tr>
...
<td>
@foreach($customer->customerPackage as $package)
@php
$array[] = $package->package->title;
@endphp
@endforeach
{{ @implode(', ', $array) }}
</td>
...
</tr>
@endforeach
我希望我解释清楚了..
你可以加入你的表然后使用GROUP_CONCAT得到这样的结果:
return self::leftJoin('customer_packages','customer_packages.customer_id','customers.id')
->leftJoin('packages','packages.id','customer_packages.package_id')
->selectRaw("customers.id ,customers.name,GROUP_CONCAT(packages.id SEPARATOR ',') packages")
->groupBy(['customers.id','customers.name'])->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.