php - Laravel 关系将列组合到逗号分隔的字符串
问题描述
在我的 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
客户.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();
推荐阅读
- java - freemarker中的数字格式问题 - 在小数点后获得四舍五入
- vue.js - VueJS:相对资源在反向代理后面不起作用
- c - arm_math 矩阵乘法硬故障
- redis - 如何使用 StackExchange.Redis 断开与 redis 的连接?
- php - 如何更好地将包裹(重量)拆分到不同的卡车以达到最佳效率
- neo4j - 试图让我的密码语句不区分大小写
- javascript - 选择项目时动态更改 p:selectCheckboxMenu 的样式
- django - ModelForm 未在数据库中创建新条目
- jmeter - 是否有任何指南或工具可用于将 JMeter .jmx 文件转换为空手道 DSL 功能文件?
- typescript - 如何告诉 TypeScript 只允许具有字符串值的属性作为函数的参数