【问题标题】:Laravel rename collection keysLaravel 重命名集合键
【发布时间】:2021-04-09 18:39:21
【问题描述】:

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

$tags = Tag::all()->map->only(['id', 'name']);

这会产生以下数据。

[{"id":1,"name":"tag 2"},{"id":2,"name":"tag 3"},{"id":3,"name":"tag-44"},{"id":4,"name":"biyoloji"}]

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

[{"value":1,"text":"tag 2"},{"value":2,"text":"tag 3"},{"value":3,"text":"tag-44"},{"value":4,"text":"biyoloji"}]

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

【问题讨论】:

  • 您可以在查询的 select 语句中为列设置别名,然后以您想要的方式返回它们

标签: php laravel collections php-7 laravel-8


【解决方案1】:

我能提出的最佳方式:

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

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

【讨论】:

  • 找到解决方案。
【解决方案2】:

您可以通过查询更有效地做到这一点

$tags = Tag::get(['id as value', 'name as text']);

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 2017-12-08
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多