3

我有一行代码类似于以下内容:

Sport::pluck('id', 'name)

我正在处理需要这种格式的列表的前端 JavaScript:

var list = [
 { text: 'Football', value: 1 },
 { text: 'Basketball', value: 2 },
 { text: 'Volleyball', value: 3 }
 ...
]

我试图弄清楚如何以某种方式将我从模型中提取的值idname值转换为类似于 Javascript 的格式list

如果不清楚,我希望最终得到一个包含两个键的关联数组:textand value, wheretext代表name我模型上的字段, wherevalue代表id模型的 - 我希望这是有道理的。

我将如何处理这个?

我最初尝试过这样的事情(没有检查文档)

Sport::pluck(["id" => "value", "name" => "text]);

但这不是你的做法,现在很清楚了。我还尝试了一些与地图相关的片段,我似乎无法使用 Ctrl-z。

有什么建议么?

4

4 回答 4

8

另一种方法是使用map->only()

Sport::all()->map->only('id', 'name');
于 2019-06-26T14:43:28.603 回答
4

目的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();
于 2019-04-11T05:53:14.977 回答
1

你可以使用地图。(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 资源将您的数据从 eloquent 转换为前端: https ://laravel.com/docs/5.8/eloquent-resources

于 2019-04-10T20:33:53.927 回答
1

尝试toArray功能:

Sport::pluck('id', 'name)->toArray();

然后你可以用json_encodephp 函数返回你的结果;

于 2019-04-10T21:11:52.980 回答