Laravel Eloquent GroupBy KeyBy

Dev*_*Wol 0 php laravel eloquent

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

  • 国家代码
  • 代码
  • 价值

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

示例数据集

country_code  |  code     |  value
------------------------------------------------
EN            |  welcome  |  Welcome
FR            |  welcome  |  Bienvenue
DE            |  welcome  |  herzlich willkommen
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行一个雄辩的查询,该查询将返回如下结果:其想法是将结果按country_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"
      }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下雄辩的查询,但这不会返回上面的内容,它确实按国家/地区代码分组,但组中的结果没有为每个值设置键作为代码列。

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

Clo*_* Fu 5

你可以使用这个:

Language::all()->groupBy('country_code')->map->keyBy('code');
Run Code Online (Sandbox Code Playgroud)

这应该会给你你想要的结果。