如何解决Laravel关系将列合并为逗号分隔的字符串
在laravel应用程序中,我有3个表,分别为customers
,packages
和customer_packages
。我需要在package
字符串中显示每个客户的每个comma separated
。
例如:
# | Customer | Package(s)
------------------------------
1 | Customer - 1 | 123,456,789,...
2 | Customer - 2 | 456,...
关系:
customers -> hasMany -> customer_packages -> hasOne -> packages
Customer.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();
}
CustomerPackage.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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。