При вызове отношения Laravel оно автоматически добавляется. Как это работает? - PullRequest
3 голосов
/ 25 октября 2019

При вызове:

$user->company

, а затем возвращении JSON-представления $user, оно добавляет отношение компании к ответу, даже если я этого не хочу.

Кто-нибудь знает причину, по которой это происходит?

1 Ответ

2 голосов
/ 25 октября 2019

Я предполагаю, что $user является экземпляром User Eloquent модели и имеет определенное отношение company, которое возвращает экземпляр Company Eloquent модели.

Учитывая следующий код, вы бы вернули объект JSON, который содержал выходные данные свойств в модели User, вероятно, те, которые определены свойством visible в модели (или все, кроме тех, которые определены свойством hidden вмодель).

$user = User::findOrFail(1);
return $user->toJson();

В этом примере отношение company не будет частью возвращаемых данных (если только вы не используете свойство with в модели, чтобы гарантировать, что оно всегда возвращается).

Однако, с помощью следующего кода вы бы вернули объект JSON, который содержал выходные данные всех свойств модели User, а также представление JSON его связанного отношения company (при условии, что ваш visible или *Свойство 1020 * в модели User допускает следующее:

$user = User::findOrFail(1);
$user->company;
return $user->toJson();

Причина различия заключается в том, что при вызове метода toJson Laravel использует метод с именем getArrayableRelations, чтобы определить, какие отношения доступныдолжны быть возвращены. Любое отношение, которое уже было загружено экземпляром модели, будет включено в этот вывод.

Когда вы вызываете $user->company, вы загружаете отношение company локально в экземпляре модели, и онозатем будут включены в любые методы сериализации, такие как toArray или toJson.

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