#laravel #laravel-4
#laravel #laravel-4
Вопрос:
Я пытаюсь сохранить некоторые данные в своей базе данных, и мне нужно отформатировать дату / время перед сохранением.
мой код выглядит следующим образом:
public static function toSqlDate($date, $formatResult = true)
{
if (!$date)
{
return null;
}
$dateTime = DateTime::createFromFormat(DEFAULT_DATETIME_FORMAT, $date, new DateTimeZone(DEFAULT_TIMEZONE));
return $formatResult ? $dateTime->format('Y-m-d') : $dateTime;
}
Когда я пытаюсь сохранить, я получаю следующую ошибку в отладчике. строка возврата — это строка, выделенная как имеющая ошибку.
Symfony Component Debug Exception FatalErrorException
Вызов функции-члена format() для не-объекта
Я не совсем уверен, как даже попытаться это исправить. Есть ли способ, которым я могу вывести каждое из извлекаемых значений, прежде чем оно выдаст ошибку? Я пытаюсь выяснить, что $DateTime не возвращается как объект.
любая помощь была бы очень признательна.
Некоторая дополнительная информация:
Я создал утилиту / псевдоним, указывающий на указанную выше функцию, и в моем репозитории моделей я получаю к ней доступ следующим образом.
public function save($publicId, $data)
{
...
$form->date = Utils::toSqlDate($data['date']);
...
$form->save();
...
}
и на мой взгляд, у меня есть следующее поле
{{ Former::text('date')->addClass('form-control form-control-inline input-medium default-date-picker')->data_bind("datePicker: date, valueUpdate: 'afterkeydown'") }}
Комментарии:
1. Как вы называете свой
toSqlDate()
, можете ли вы показать какой-нибудь код, как он используется?2. @Unnawut я добавил дополнительную информацию, спасибо за ваше время.
3. О, в таком случае просто следуйте @WereWolf — ответ Альфы, и вы должны быть настроены!
Ответ №1:
Вы можете создать mutator
в своем методе Eloquent Model
автоматическое преобразование при сохранении любой модели, например, если у вас есть временная метка, как dob
в вашей User
модели, тогда просто добавьте в свою User
модель следующий метод:
public function setDobAttribute($value)
{
$dt = CarbonCarbon::createFromFormat('Y/m/d', $value)->toDateString();
$this->attributes['dob'] = $dt;
}
Таким образом, вы можете просто сохранить пользовательскую модель easilt, например:
$user = new User;
$user->dob = Input::get('dob');
// ...
$user->save();
Дата будет автоматически установлена для вас с помощью mutator/setDobAttribute
метода, определенного в User
модели, вам ничего не нужно делать.