Laravel Eloquent GroupBy通过KeyBy

时间:2019-06-12 10:06:01

标签: php laravel eloquent

我有一个语言表,其中包含以下列。

  • 国家/地区代码
  • 代码

此表包含与我的应用程序不同部分相关的各种代码。例如,主屏幕可能会说“欢迎”,因此该短语的代码为“ welcome”。我将在表中存储3种不同语言的变体,并设置国家/地区代码。

示例数据集

country_code  |  code     |  value
------------------------------------------------
EN            |  welcome  |  Welcome
FR            |  welcome  |  Bienvenue
DE            |  welcome  |  herzlich willkommen

我正在尝试运行一个雄辩的查询,该查询将返回如下结果:想法是将结果按country_code分组,然后将每个结果的键设置为code列。

{
  "EN": [
      "welcome": {
        "country_code": "EN",
        "value": "Welcome",
        "code": "welcome"
      },
      "goodbye": {
        "country_code": "EN",
        "value": "Goodbye",
        "code": "goodbye"
      }
  ],
  "FR": [
      "welcome": {
        "country_code": "FR",
        "value": "Bienvenue",
        "code": "welcome"
      },
      "goodbye": {
        "country_code": "FR",
        "value": "Au revoir",
        "code": "goodbye"
      }
  ],
  "DE": [
      "welcome": {
        "country_code": "DE",
        "value": "Herzlich Willkommen",
        "code": "welcome"
      },
      "goodbye": {
        "country_code": "DE",
        "value": "Auf Wiedersehen",
        "code": "goodbye"
      }
  ]
}

我尝试了以下雄辩的查询,但这并没有返回上面按国家(地区)代码分组的结果,但是随后该组中的结果没有为每个值设置键作为代码列。

$languages = \App\Language::all();
return $language->keyBy('code')->groupBy('country_code');

1 个答案:

答案 0 :(得分:3)

您可以使用此:

Language::all()->groupBy('country_code')->map->keyBy('code');

这应该给您想要的结果。