繁体   English   中英

Laravel 雄辩,根据Column 值创建集合

[英]Laravel eloquent, create collection based on Column value

我有一个如下所示的示例表:

| id | is_new | cate |
| 0  |   1    | [5]  |
| 1  |   1    | [5]  |
| 2  |   1    | [7]  |
| 3  |   1    | [6]  |

在我调用以下函数之后

   $product = Products::where('is_new', 1)->get();

该集合具有以下数据结构

Collection {#1284 ▼
  #items: array:4 [▼
    0 => Products {#1285 ▶}
    1 => Products {#1286 ▶}
    2 => Products {#1287 ▶}
    3 => Products {#1288 ▶}
  ]
}

我还可以通过以下方式返回类别 ID 列表:

    $category = Category::where('type', 2)->pluck('id')->all();  

我想知道有没有什么好方法可以基于 cate 实现以下结构(或类似结构)。 我可以使用蛮力方式通过循环遍历 $category 然后手动添加到新集合来创建它,我认为有更好的方法来做到这一点。

Collection {#1284 ▼
  #items: array:3 [▼
    5 => array:2 [▼
         0 => Products {#1285 ▶}
         1 => Products {#1286 ▶}
         ]
    6 => Products {#1287 ▶}    or  6 => array:1 [ 0 => Products {#1287 ▶} ]
    7 => Products {#1288 ▶}
  ]
}

基于答案的解决方案更新:

$product->groupBy(function($item) {
        return $item['cate'][0]; //because the entry is a list
    });

您应该考虑使用groupBy类的东西将您的类别组合在一起。 它可以在数据库级别(假设您具有参照完整性)使用外键完成。 您还将得到保证,返回的是每个类别的数组,这将使事情更加一致(然后,您不需要检查它是数组还是Products的实例)。

如果您的类别像数组一样存储,您可能需要更改数据库布局,但为此您应该使用中间表 - 查看多对多关系

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM