Документация Laravel 5.5 Аксессоры и мутаторы

Laravel 5.5

laravel

Аксессоры и мутаторы

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

Введение

Аксессоры и мутаторы дают возможность изменить формат значений Eloquent атрибутов при их извлечении из объекта модели или сохранении в объект модели. Например, в базе данных вы храните зашифрованные с помощью Laravel encrypter данные, тогда можно их автоматически расшифровывать в Eloquent модели.

Eloquent может автоматически преобразовывать даты в Carbon объекты и даже текстовые поля в JSON.

Аксессоры и мутаторы

Создание аксессора

Для создания аксессора необходимо в модели определить метод getFooAttribute , где Foo - это "studly case" имя столбца, к которому вы хотите получить доступ. В примере ниже мы создаем аксессор для атрибута с именем first_name . Аксессор будет автоматически вызываться Eloquent-ом при попытке получить значение атрибута first_name :

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

Создание мутатора

Для создания мутатора необходимо в модели определить метод setFooAttribute , где Foo - это "studly case" имя столбца, к которому вы хотите получить доступ. В примере ниже мы создаем мутатор для атрибута с именем first_name . Этот мутатор будет автоматически вызываться  при попытке установить значение атрибута first_name в модели объекта:

Мутатор получает значение, которые было задано для атрибута first_name, преобразует его и итоговое значение сохраняет во внутреннем свойстве $attributes . Например, присвоим атрибуту first_name значение Sally :

Тогда будет вызван метод setFirstNameAttribute с параметром $value, равным Sally . Мутатор применит к нему функцию strtolower и сохранит результат во внутреннем массиве $attributes .

Мутаторы даты

По умолчанию Eloquent преобразует столбцы created_at и updated_at в объекты класса Carbon. Это расширение php-класса DateTime с множеством полезных методов. Вы можете сами определить, какие именно даты будут автоматически преобразовываться, определив свойство $dates в модели. Можно даже полностью отключить этот мутатор.

Когда столбец определен как дата, вы можете присвоить значение в виде UNIX timestamp, строки формата даты (Y-m-d) или даты-время и, конечно, объекта класса DateTime или Carbon. И это значение будет  корректно сохранено в вашу базу:

При получении значений атрибутов, указанных в свойстве $dates, они автоматически преобразуются в объекты Carbon, к которым вы можете применять любые функции этого класса:

Форматы дат

По умолчанию timestamps имеют формат 'Y-m-d H:i:s'. Для изменения формата определите свойство $dateFormat в вашей модели. Этот  свойство описывает формат атрибуты для хранения в базе данных и для сериализации модели в массив или JSON:

Кастинг (casting) атрибутов

Свойство $casts в вашей модели предназначено для преобразования значений атрибутов в следующие типы данных: integer, real, float, double, string, boolean, object, array, collection, date, datetime, timestamp. Это свойство - массив, в котором ключи - имена атрибутов, значения - тип данных, в который необходимо преобразовать атрибуты.

Например, возьмем атрибут is_admin, который хранится в базе данных как integer (0 или 1)  и преобразуем его в boolean:

Теперь атрибут is_admin всегда будет типа boolean, несмотря на то, что исходное значение хранится в базе как integer:

Кастинг в массив и в JSON

Кастинг в массив особенно полезен при работе со столбцами, которые содержат данные в виде сериализации JSON. Пусть база данных содержит поле options типа json или text c cериализованным JSON. Добавим array для этого атрибута в свойство casts :

Теперь при обращении к этому атрибуту значение будет автоматически десериализовано из JSON в стандартный массив PHP. Присваивание атрибуту значения  приведет к обратному: автоматическая сериализация в JSON для сохранения в базу данных.

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

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