Laravel Eloquent запрос собственного отношения для возврата вложенного JSON - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть таблица с личностными отношениями один-к-одному для представления иерархической структуры.Ниже приведены таблица и несколько примеров данных:

Locations Table Example Data

Это код модели местоположения дляотношение:

class Location extends Model
{
    public function location()
    {
        return $this->hasOne('App\Location');
    }
}

Я хотел бы запросить таблицу Locations и отправить ответ JSON, как в примере ниже, но я не уверен, как подойти к запросу:

{
    "id": 1,
    "name": "Country",
    "location_id": null
    "location": {
        "id": 2,
        "name": "State",
        "location_id": 1
        "location": {
            "id": 3,
            "name": "City",
            "location_id": 2
        }
    }
}

1 Ответ

0 голосов
/ 21 сентября 2018

Чтобы всегда стремиться загрузить отношение местоположения и не беспокоиться о глубине, вы можете добавить свойство $ with к вашей модели местоположения:

protected $with = ['location'];

Теперь, когда вы возвращаете местоположение, оно будет иметь все вложенные вложенные элементы.загруженные местоположения:

return App\Location::find(1);

Laravel также обрабатывает возвращение этого в виде JSON, если оно возвращено из метода контроллера.

, как указано Kyslik, это представляет потенциал N + 1проблема, потенциальная глубина вместе с размером запроса и остальная среда должны быть учтены при решении использовать решение, подобное этому, в производственной среде, для чего-то вроде местоположений, это, вероятно, не проблема и вполне стоит простоты

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