Вставьте дату из строки с помощью Doctrine2 - PullRequest
2 голосов
/ 30 ноября 2011

Короткая версия:

Кто-нибудь знает, как сделать простую вставку даты с помощью Doctrine2? Мне нужно вставить дату в формате ГГГГ-ММ-ДД («Y-m-d») в поле «Дата» MySQL.

Если вы уже знаете, как это сделать, вы можете пропустить объяснение ниже того, что я пробовал до сих пор. В противном случае более подробная информация о моей проблеме приведена ниже перерыва.


Длинная версия:

У меня есть приложение Doctrine2 CRUD, и мне нужно вставить дату отправки формы в базу данных MySQL.

Дата представляется в форме с использованием трех раскрывающихся меню: Год, Месяц и День.

В моем методе репозитория Doctrine я использую функцию date () для преобразования представленных значений в дату, а затем вызываю метод с именем setCreated () в своем классе сущностей:

$string = $values['year'] . '-' . $values['month'] . '-' . $values['day'];
$date = date('Y-m-d', strtotime($string));
$item->setCreated($date);

Затем в setCreated () сначала я попытался передать дату следующим образом:

public function setCreated($date) {
    $this->created = $date;
}

Но при этом появляется сообщение об ошибке: «Вызов функции-члена формата () для необъекта в ... Doctrine \ DBAL \ Types \ DateType.php".

Затем я попытался изменить сеттер следующим образом:

public function setCreated($date) {
    $this->published = new \Doctrine\DBAL\Types\DateType($date);
}

Но это тоже не работает: «Вызов приватной доктрины \ DBAL \ Types \ Type :: __ construct () ...»

Наконец я попытался создать простой объект Date для вставки:

public function setCreated($date) {
    $this->created = new \Date($date);
}

Это дает мне такую ​​ошибку: «Класс« Дата »не найден в пути \ К \ Entity \ Item.php ...»

Я также пробовал указанную выше версию без начального обратного слеша для даты, что выдает мне следующее сообщение об ошибке: «Предупреждение: require (Path \ Entity \ Date.php) не удалось открыть поток. Нет такого файла или каталога в Path \ Doctrine \ Common \ ClassLoader.php ... "

(Для подтверждения, мои пути включения правильно настроены в php.ini - в частности, include_path \php\PEAR, в котором находится Date.php.)

В руководстве Doctrine есть объяснение о работе с экземплярами DateTime, но мне не нужно сохранять время, только дату как YYYY-MM-DD.

Кажется, это будет довольно распространенная проблема - кто-нибудь видит, что я делаю неправильно, и / или знает, как сделать вставку даты в Doctrine2?

Ответы [ 2 ]

8 голосов
/ 30 ноября 2011

Вы слишком заботитесь о своей базе данных.Просто создайте экземпляр DateTime и присвойте его в качестве значения свойству объекта типа DateTime.

База данных сохранит его так, как вы его определили, так что не беспокойтесь.

И если вы отформатируете его обратно в YYYY-MM-DD отформатированное строковое значение, вы увидите, что оно сохранилось.

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

2 голосов
/ 30 ноября 2011

Просто добавьте конструктор в Ваш класс (чтобы установить дату по умолчанию).Если вы хотите установить собственную дату, просто измените этот код и используйте его в методе setDateField () аналогично:

public function __construct() {
        $this->date_field = new DateTime(); 
}
...