Laravel-用指定的键弹起

时间:2019-04-10 20:30:21

标签: php arrays laravel pluck

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

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

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

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

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

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

我将如何处理?

我最初尝试过类似的操作(无需检查文档)

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

但这不是您的操作方式,这现在已经很清楚了。我还尝试了一些与地图相关的代码段,对于Ctrl-z来说似乎无法实现。

有什么建议吗?

4 个答案:

答案 0 :(得分: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资源将数据从雄辩的前端转换为: https://laravel.com/docs/5.8/eloquent-resources

答案 1 :(得分:0)

尝试使用toArray函数:

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

然后,您可以使用json_encode php函数返回结果;

答案 2 :(得分:0)

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']

请参阅documentation

您可以使用简单的代码输出。

Sport::selectRaw('id as value, name as text')->get();

答案 3 :(得分:0)

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

Sport::all()->map->only('id', 'name');