Вызов функции-члена format() для не-объекта при работе с датой / временем

#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 модели, вам ничего не нужно делать.