Laravel 重命名集合键

Sky*_*rth 4 php collections laravel php-7 laravel-8

我有以下行来获取集合数组。

$tags = Tag::all()->map->only(['id', 'name']);
Run Code Online (Sandbox Code Playgroud)

这会产生以下数据。

[{"id":1,"name":"tag 2"},{"id":2,"name":"tag 3"},{"id":3,"name":"tag-44"},{"id":4,"name":"biyoloji"}]
Run Code Online (Sandbox Code Playgroud)

我的目标是重命名集合中的关键名称,如下所示。

[{"value":1,"text":"tag 2"},{"value":2,"text":"tag 3"},{"value":3,"text":"tag-44"},{"value":4,"text":"biyoloji"}]
Run Code Online (Sandbox Code Playgroud)

基本上,我想将“键”重命名为“值”,将“名称”重命名为“文本”。我尝试了pluck()函数、get()函数、映射,但无法使其工作。最有可能的是,用 foreach 迭代它就toArray()可以解决问题,但我正在寻找正确的方法来做到这一点。我的环境是 Laravel 8 和 PHP 7.4

小智 11

我可以建议的最好方法:

$tags = Tag::query()->get(['id', 'name'])
   ->map(function($tag){
        return [
           'value' => $tag->id,
           'text' => $tag->name,
        ];
    })
    ->toArray();
Run Code Online (Sandbox Code Playgroud)

注意get(['id', 'name])调用。将必填字段传递给get方法有助于提高查询性能。特别是如果表中有很多未使用的列。


rar*_*ass 11

您可以通过查询更有效地完成此操作

$tags = Tag::get(['id as value', 'name as text']);
Run Code Online (Sandbox Code Playgroud)