在laravel应用程序中,我有3个表,分别为customers
,packages
和customer_packages
。我需要在package
字符串中显示每个客户的每个comma separated
。
例如:
# | Customer | Package(s)
------------------------------
1 | Customer - 1 | 123, 456, 789, ...
2 | Customer - 2 | 456, 789, ...
关系:
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
我希望我能清楚地解释一下。
答案 0 :(得分:0)
您可以加入表格,然后使用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();