Laravel Eloquent GroupBy KeyBy - PullRequest
       4

Laravel Eloquent GroupBy KeyBy

0 голосов
/ 12 июня 2019

У меня есть таблица языков со следующими столбцами.

  • код страны
  • код
  • значение

Эта таблица содержит различные коды, которые относятся к различным разделам моего приложения. Например, на главном экране может появиться надпись «Добро пожаловать», поэтому код этой фразы «Добро пожаловать». Я бы в таблице сохранил 3 варианта на разных языках, и код страны был бы установлен.

Пример набора данных

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

Я пытаюсь выполнить красноречивый запрос, который бы возвращал результат, подобный следующему: Идея состоит в том, чтобы результаты группировались по коду страны, а затем ключи каждого результата устанавливались как столбец кода.

{
  "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 Ответ

3 голосов
/ 12 июня 2019

Вы можете использовать это:

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

Это должно дать вам желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...