Вернуть записи одной таблицы с отношением другой в формате массива - PullRequest
0 голосов
/ 27 февраля 2020

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

У меня есть 3 таблицы

-Contry
-Province
-Entity

Страна может иметь несколько провинций и Провинция может иметь несколько субъектов. У меня уже есть определенные модели и отношения, и они работают, чего я не достиг, это следующее: я хочу получить многомерный массив со следующей структурой:

-Country1
   -Province1
      Entity1
      Entity2
      Entity3
-Country2
   -Province1
      Entity1
      Entity2

Что я пробовал:

$entities = Country::with(['provinces' => function($province) {
   return $province->with('entities');
}])->get()->toArray();

но это возвращает меня к следующей договоренности:

array:2 [▼
  0 => array:7 [▼
    "id" => 1
    "name" => "Country1"
    "abbreviation" => "CT1"
    "active" => true
    "created_at" => "2020-02-27 17:27:57"
    "updated_at" => "2020-02-27 17:27:57"
    "provinces" => array:16 [▶]
  ]
  1 => array:7 [▼
    "id" => 2
    "name" => "Country2"
    "abbreviation" => "CT2"
    "active" => true
    "created_at" => "2020-02-27 17:27:57"
    "updated_at" => "2020-02-27 17:27:57"
    "provinces" => array:2 [▼
      0 => array:7 [▼
        "id" => 17
        "name" => "Province1"
        "country_id" => 2
        "active" => true
        "created_at" => "2020-02-27 17:27:57"
        "updated_at" => "2020-02-27 17:27:57"
        "entities" => array:2 [▶]
      ]
      1 => array:7 [▼
        "id" => 18
        "name" => "Province2"
        "country_id" => 2
        "active" => true
        "created_at" => "2020-02-27 17:27:57"
        "updated_at" => "2020-02-27 17:27:57"
        "entities" => []
      ]
    ]
  ]
]

Как видите, значение сущностей пустое, не могли бы вы помочь мне с этой проблемой.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Хорошо, для тех, кто приезжает сюда в поисках ответа, им удалось решить проблему следующим образом:

$entities = Country::with(['provinces' => function($province) {
            return $province->has('entities');
        }])->get()->transform(function($country) {
            return [$country->name => $country->provinces->transform(function($province) {
                return [$province->name => $province->entities->pluck('name', 'id')];
            })->collapse()];
        })->collapse()->toArray();

В основном, это то, что он получает все страны и все провинции, которые содержать как минимум 1 объект.

0 голосов
/ 27 февраля 2020

Должно быть:

$entities = Country::with(['provinces.entities'])->get()->toArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...