Laravel Eloquent PHP如何使用唯一列值作为键来获取MySQL表中的所有行

时间:2017-06-13 23:13:47

标签: php mysql laravel orm eloquent

我正在使用Laravel的Eloquent ORM从MySQL数据库中检索数据。我想从表中获取所有行,其中我选择的某列的唯一值用作键,其中每个键包含一个对象数组(每个对象是一列,其列值等于该键)。我正在使用Eloquent的模型

我尝试使用Laravel文档中的keyBy方法,但只在新集合中获得一行。我想要新集合中的所有行。

示例:

food table
name | type
apple | fruit
banana | fruit
asparagus | vegetable
broccoli | vegetable

我想返回

{"fruit": [{"name": "apple", "type": "fruit"}, {"name": "banana", "type": "fruit"}], "vegetable": [{"name": "asparagus", "type": "vegetable"}, {"name": "broccoli", "type": "vegetable"}]}

相反,当我这样做时,它会为每个键返回一个对象

Food::all()->keyBy('type')

是否有一种简单的方法可以从表中获取所有行并将它们放入数组中,具体取决于它们的键,即我指定的列值?

1 个答案:

答案 0 :(得分:2)

您可以在Laravel Collection(而不是Eloquent构建器)上使用groupBy。

$collection = Food::all();
$grouped = $collection->groupBy('type');

这将为每种类型提供单独的集合。