Laravel - toArray () против getAttributes () - PullRequest
2 голосов
/ 25 февраля 2020

Я использую laravel 6 и использую eloquent join для отображения данных из нескольких таблиц.

Рассмотрим следующий код:

    $ToGetDefaultAddress 
    = TbPersonaddress::join('tb_cities AS TbCitie','TbCitie.n_CityId_PK', '=', 'tb_personaddresses.n_CityId_FK')
                    ->join('tb_counties AS TbCountie','TbCountie.n_CountyId_PK', '=', 'tb_personaddresses.n_CountyId_FK')
                    ->join('tb_states AS TbState', 'TbState.n_StateId_PK','=' ,'tb_personaddresses.n_StateId_FK')
                    ->select('tb_personaddresses.n_PersonAddressesId_PK','tb_personaddresses.n_PersonId_FK',
                    'tb_personaddresses.d_EffectiveDateFrom','tb_personaddresses.d_EffectiveDateTo',
                    'TbCitie.s_CityCode','TbCitie.s_CityName','TbCountie.s_CountyCode',
                    'TbCountie.s_CountyName','TbState.s_StateCode','TbState.s_StateName')->first();

                    dd("Actual output:::::",$ToGetDefaultAddress);

Фактический вывод: enter image description here

Как показано в приведенном выше коде, я сохраняю этот вывод в переменной $ToGetDefaultAddress. Теперь для получения только данных атрибутов оба toArray() и getAttributes() возвращают мне один и тот же результат.

Например:

$DefaultAddress = $ToGetDefaultAddress->toArray();

и

$DefaultAddress = $ToGetDefaultAddress->getAttributes();

возвращает мне тот же вывод, как показано ниже: enter image description here

Мой вопрос заключается в том, в чем разница между использованием toArray() и getAttributes()? Какой из них рекомендуется? Когда использовать toArray() и когда использовать getAttributes()?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Давайте посмотрим на исходный код:

Если вы посмотрите на них, вы увидите, что метод toArray() возвращает полную модель со связями и атрибутами, а getAttributes() возвращает только атрибуты модели (обычно только столбцы).

Это фрагмент кода из laravel источника код:

    /**
     * Convert the model instance to an array.
     *
     * @return array
     */
    public function toArray()
    {
        return array_merge($this->attributesToArray(), $this->relationsToArray());
    }

Я видел один метод в исходном коде, который я не знал. Вы также можете проверить это: ->attributesToArray()

1 голос
/ 25 февраля 2020

Согласно Laravel Документация:

Чтобы преобразовать модель и ее загруженные связи в массив, следует использовать метод toArray. Этот метод является рекурсивным, поэтому все атрибуты и все отношения (включая отношения отношений) будут преобразованы в массивы:

$user = App\User::with('roles')->first();

return $user->toArray();

Laravel API -> Model -> method_getAttributes

getAttributes (): получение всех текущих атрибутов модели.

Laravel -> Eloquent: сериализация-> сериализация в массивы

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