如何解决如何对像 MySQL GROUP_CONCAT 这样的 Laravel 集合进行分组
我有一个 Laravel 函数,它从两个或三个以上的单独集合(不同的 BD 查询)返回这个结果合并集合:
Illuminate\Support\Collection {#3361
all: [
{#3359
+"id": 3,+"name": "Jose Achecar",+"role": 1,},{#3344
+"id": 1,+"name": "Oswaldo Graterol",{#3384
+"id": 4,+"name": "Assaily",+"role": 2,{#3372
+"id": 3,{#3349
+"id": 5,+"name": "Alejandro",{#3382
+"id": 2,+"name": "marcos Mendozas",],}
如您所见,有一个元素(带有 id
3 的元素)具有两个角色并显示两次
Illuminate\Support\Collection {#3361
all: [
{#3359
+"id": 3,+"role": [1,2],+"role": [1],+"role": [2],}
解决方法
您没有包含任何代码,这使得回答变得更加困难。
基本上,在 Laravel 中有两种处理数据库的方法:
- 数据库外观
- 雄辩的模型
虽然 DB facade 提供了一个用于查询构建的接口,但 Eloquent 提供了代表表的对象(模型)。
Laravel 包含 Eloquent,一个对象关系映射器 (ORM) 使与数据库交互变得愉快。使用时 Eloquent,每个数据库表都有一个对应的“Model”被使用 与该表进行交互。除了从检索记录 数据库表,Eloquent 模型允许您插入、更新和 也删除表中的记录。
现在,如果您使用模型,您的朋友就是 with() 方法。你有很多资料,例如可以阅读this answer。
简而言之 - 这个想法是执行一个 SELECT
查询,然后使用 foreach() 函数迭代结果。
否则,假设您不使用模型,您可以使用纯php代码实现您想要的(请阅读this answer)。
,没有进一步的信息,我会这样做:
$coll = $coll->reduce(function($carry,$item) {
if (!$carry->contains('id',$item->id)) {
$newItem = clone $item;
$newItem->role = [ $newItem->role ];
$carry->push($newItem);
} else {
$carry->firstWhere('id',$item->id)->role[] = $item->role;
}
return $carry;
},new Illuminate\Support\Collection());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。