微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何对像 MySQL GROUP_CONCAT 这样的 Laravel 集合进行分组

如何解决如何对像 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 中有两种处理数据库的方法:

  1. 数据库外观
  2. 雄辩的模型

虽然 DB facade 提供了一个用于查询构建的接口,但 Eloquent 提供了代表表的对象(模型)。

来自documentation

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 举报,一经查实,本站将立刻删除。