Php Laravel-如何按键分组数据并保存到阵列?
我有表属性值(id、值、属性组id)。Php Laravel-如何按键分组数据并保存到阵列?,php,laravel,Php,Laravel,我有表属性值(id、值、属性组id)。 我需要返回按键attr\u group\u id分组的集合 在clear php中使用我制作的ORM RedBean: $data = \DB::table('attribute_values')->get(); $attrs = []; foreach ($data as $k => $v){ $attrs [$v['attr_group_id']][$k] = $v['value']; } return $attrs; 我需
我需要返回按键attr\u group\u id分组的集合 在clear php中使用我制作的ORM RedBean:
$data = \DB::table('attribute_values')->get();
$attrs = [];
foreach ($data as $k => $v){
$attrs [$v['attr_group_id']][$k] = $v['value'];
}
return $attrs;
我需要同样的使用Laravel,在这个之后:
$data = \DB::table('attribute_values')->get();
我的桌子
id value attr_group_id
1 one 1
2 two 1
3 three 2
4 four 2
5 five 3
6 six 3
我需要结果
Array(
[1] => Array
(
[1] => one
[2] => two
)
[2] => Array
(
[3] => three
[4] => four
)
[3] => Array
(
[5] => five
[6] => six
)
)
获取所有数据,并将其映射到每行的属性id即可
$data = \DB::table('attribute_values')->get();
$attrs = [];
foreach ($data as $key => $value) {
// -> as it return std object
$attrs[$value->attr_group_id][] = $value->value;
}
dd($attrs);
在原始
SQL
中执行所有这些操作将更加高效,SQL
数据库非常擅长这些操作SQL
有一个groupby函数,因为您正在覆盖值,所以我只需要使用max()
(这看起来很奇怪,您覆盖了值,您真的只需要唯一的结果吗?)
编辑
由于作用域已更改,因此可以使用Laravels集合方法,即集合上的操作
DB::table('attribute_values')
->get()
->groupBy('attr_group_id')
->toArray();
您可以使用collection的groupBy()函数:
$data = \DB::table('attribute_values')->get()->groupBy('attr_group_id');
它将此字段值下具有相同属性组id的记录合并为集合的键。Laravel版本5.8
DB::table('attribute_values')
->get()
->groupBy('attr_group_id')
->toArray();
因此,您需要对id进行分组
如果您需要使用模型方式,我已将模型创建为AttributeValue
$modelWay = \App\AttributeValue::get()
->groupBy('attr_group_id');
如果需要,在DBWay中,我已经创建了作为属性值的表
$dbWay = \DB::table('attribute_values')
->get()
->groupBy('attr_group_id');
两者都会产生相同的结果朋友,这是我需要的现成任务! 我自己做的,你帮了我。如果有兴趣,可以阅读。 我会向你解释为什么我需要这种特殊的方法。我正在做一个带时钟的在线商店,现在有一个任务是制作过滤器和过滤器属性。 所以有三张桌子
attribute_groups table
我需要在my.blade.php上显示Laravel小部件,如下所示
{{ Widget::run('filter', 'tpl' => 'widgets.filter', 'filter' => null,]) }}
当我在管理面板中创建新产品时。
我必须在attribute_products中保存产品id和attribute_id,但是一个产品可以有尽可能多的属性。那么,如果我使用这个选项
$data = \DB::table('attribute_values')
->get()
->groupBy('attr_group_id')
->toArray();
我得到的结果是:
但是!每个新数组都以索引0开始。但我需要一个索引,它表示表attribute_值中的id.attr_group_id,用于保存到attribute_产品中。
在我看到唯一适合我的方法之后
$data = \DB::table('attribute_values')->get();
$attrs = [];
foreach ($data as $key => $value) {
$attrs[$value->attr_group_id][$value->id] = $value->value;
}
return $attrs;
我一直在寻找的结果
现在你可以看到有什么不同,需要什么了。数组索引从1,2,3,4,5开始,这个索引=attr_group_id。不幸的是,我一开始问不出正确的问题。谢谢大家。对不起,我的照片。我的表:我需要结果:try
$data=\DB::table('attribute_values')->groupBy('attr_group_id')->get()代码>您是否有此型号?如果是,请共享型号名称否我没有。我不想为此创建单独的模型。@Sohel0415它无法工作,因为您正在mysql查询中对记录进行分组,因此将从每个attr\u group\u id
返回第一条记录,其余记录将被跳过。请检查我的问题。我做了调整并添加了我需要的:我的表格和需要的结果。这是使用Collection的优雅方式。请检查我的答案。下文将对其进行描述。我为你做的。解释了任务是什么以及如何解决。请检查我的问题。我做了调整并添加了我需要的内容:我的表格和需要的结果。请尝试@Martin Henriksensence laravel提供的答案,这样您就不需要了foreach@Drakula捕食者大级别版本请确认如果我们将按属性组id分组,它不会为同一属性组id给出两个结果,但OP的结果每个属性组id有两个记录。所以@Martin Henriksen的数据将只获取三条记录,并将跳过每个属性组id的剩余记录。请检查我的问题。我做了调整并添加了我需要的:我的表和需要的结果。@SashaSan-此函数创建一个集合,使attr\u group\u id属性作为集合键。如果你想把它转换成数组,你也可以使用collection的toArray()函数。请检查我的答案。下文将对其进行描述。我为你做的。解释了任务是什么以及它是如何解决的。你能用一些数据共享sql文件吗。我会更深入地研究它,满足你的要求。兄弟,我已经做了我需要的。。我分享我完成的任务。
$data = \DB::table('attribute_values')
->get()
->groupBy('attr_group_id')
->toArray();
$data = \DB::table('attribute_values')->get();
$attrs = [];
foreach ($data as $key => $value) {
$attrs[$value->attr_group_id][$value->id] = $value->value;
}
return $attrs;