>我有一行类似于以下内容的代码:
Sport::pluck('id', 'name)
我正在处理前端JavaScript,它需要这种格式的列表:
var list = [
{ text: 'Football', value: 1 },
{ text: 'Basketball', value: 2 },
{ text: 'Volleyball', value: 3 }
...
]
我正在尝试弄清楚如何以某种方式将从模型中获取的id
值和name
值转换为类似于 Javascript list
的格式。
如果不清楚,我希望最终得到一个包含两个键的关联数组:text
和 value
,其中 text
表示模型上的name
字段,其中 value
表示模型的id
- 我希望这是有意义的。
我将如何处理这个问题?
我最初尝试了这样的事情(没有检查文档(
Sport::pluck(["id" => "value", "name" => "text]);
但这不是你的做法,现在很清楚了。我还尝试了一些与地图相关的片段,我似乎无法按 Ctrl-z 来。
有什么建议吗?
另一种方法是使用 map->only()
:
Sport::all()->map->only('id', 'name');
pluck
的目的不是你想做的,
请看下面的例子,
Sport::selectRaw("id as value, name as text")->pluck("text","value");
// ['1' => 'Football', '2'=>'BasketBall','3'=>'Volleyball',...]
语法
$plucked = $collection->pluck('name', 'product_id');
// ['prod-100' => 'Desk', 'prod-200' => 'Chair']
请参阅文档。
可以使用简单的代码进行输出。
Sport::selectRaw('id as value, name as text')->get();
你可以使用map。https://laravel.com/docs/5.8/collections#method-map(
$mapped = Sport::all()->map(function($item, $index) {
return [
"id" => $item["id"],
"name" => $item["text"]
];
});
这是最简单的方法。实际上,Laravel提供了一种更好的方法。您可以使用 api 资源将数据从前端的雄辩转换:https://laravel.com/docs/5.8/eloquent-resources
尝试使用toArray
函数:
Sport::pluck('id', 'name)->toArray();
然后你可以用json_encode
php函数返回你的结果;