2015-08-10 3 views
1

Я хочу получить мутированные/добавленные атрибуты модели larvel eloquent. Я попробовал $model->getAttributes(), но он возвращает массив исходных атрибутов, поскольку они хранятся в базе данных. Но я хочу также получить измененные атрибуты, которые еще не сохранены в базе данных.Мутации/добавленные атрибуты Laravel Eloquent

Я попробовал $model->toArray(), он возвращает массив необработанных и мутированных/добавленных атрибутов. Но преобразует значение поля date в строку.

Я использую mongodb как базу данных. «Дата» сохраняется как mongodate, но toArray() преобразует ее в строку - «date»: «2011-03-23 ​​12:00:00».

Поэтому, когда я пытаюсь сохранить эти измененные атрибуты, добавленные с toArray() в базу данных, моя дата сохраняется в строке.

Есть ли другой способ получения измененных/добавленных атрибутов красноречивой модели?

Заранее спасибо.

ответ

2

Кажется, вы хотите повторно использовать логику сериализации модели Eloquent для массивов, но пропустить эту часть логики, которая сериализует даты для строк.

Eloquent распознает поля даты, проверяя, было ли их имя возвращено с getDates() методом вашей модели. Перезапишите этот метод, чтобы он возвращал пустой массив, и даты не будут сериализованы.

Причина, почему вы должны переписать getDates() вместо того, чтобы просто установив $dates атрибут в пустой массив, что getDates() в дополнение к тому, что определяется в $dates также возвращает created_at и updated_at поля.

+0

Благодарим за сообщение. Но мне нужно вернуть поле «дата» из метода 'getDates()' из-за других зависимостей. Есть ли другой способ пропустить сериализацию даты в строки? – kshpra

+0

Существуют и другие способы, но они требуют некоторого кодирования/взлома - то, что вы пытаетесь достичь, заключается в двух способах представления моделей, которые предоставляет Eloquent, - не сериализованной модели и модели, сериализованной для массива. Вы можете вернуть «дату» из getDates и определить getter для «date», который будет неэтериализовать поле. Вы можете просто добавить сеттеры для всех дат, которые преобразуют строки в объекты Carbon. Вы можете переписать метод toArray в своих объектах ... Не знаете, что будет лучше для вас, поскольку я не понимаю, почему вы хотите сохранить массив-сериализованный объект в Mongo вместо простого объекта. –

+0

Спасибо. Я попробую это. – kshpra