Документация Laravel 5.5 Сериализация в Eloquent

Laravel 5.5

laravel

Сериализация в Eloquent

к содержанию документации

Введение

При разработке JSON API часто возникает необходимость конвертации моделей и их отношений в массивы и JSON. В Eloquent есть удобные методы для решения этой задачи, причем с возможностью контроля атрибутов.

Сериализация моделей и коллекций

Конвертация в массивы

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

Вы можете конвертировать и коллекции моделей в массивы:

Конвертация в JSON

Метод toJson предназначен для конвертации модели в JSON. Как и toArray , метод работает рекурсивно, поэтому все атрибуты и отношения будут преобразованы:

Второй способ: привести модель или коллекцию к типу  string, что автоматически вызовет метод toJson:

Так как модели и коллекции конвертируются в JSON при приведении их к строке, то можно возвращать объекты Eloquent напрямую из роутов или контроллеров:

Скрытие атрибутов от JSON

Если вы хотите скрыть от сериализации в JSON и массив какие-нибудь атрибуты (например, пароль), то используйте свойство hidden в модели:

! Для скрытия отношений используйте имя метода отношений

Другой подход: использовать в модели свойство visible , которое определяет список разрешенных для сериализации атрибутов. Все атрибуты вне этого списка будут скрыты для конвертации в массив или JSON:

Временное изменение видимости атрибутов

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

Если же необходимо видимый атрибут скрыть для конкретного объекта модели, то используйте метод makeHidden :

Добавление значений в JSON

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

И затем добавим имя атрибута в свойство appends модели.

Обратите внимание, что имена атрибутов обычно записываются в змеиной нотации ("snake case"), хотя аксессоры указываются в верблюжей  нотации ("camel case").

к содержанию документации

все статьи по Laravel 5