Как сохранить поле даты updated_at при сохранении базы данных в Symfony? - PullRequest
0 голосов
/ 13 сентября 2009

Это должно быть просто ... Я пытаюсь сохранить текущую дату, которая уже сохранена в поле updated_at в БД.
Я обновляю одно значение поля в той же строке, а затем сохраняю, но не хочу, чтобы оно обновляло поле updated_at. Я хочу сохранить существующее значение updated_at.

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

Я пробовал это:

$originalDate = $this->getUpdatedAt();
$this->setUpdatedAt($originalDate);
$this->save();

Кажется, что это должно работать, но все же, похоже, обновить поле.

Ответы [ 3 ]

3 голосов
/ 18 мая 2010

Столбец updated_at устанавливается только с текущим временем, если оно не было изменено. Это проверяется методом isColumnModified. Вы можете обмануть объект, полагая, что он был изменен, если сначала измените его на какое-то значение, а затем верните обратно к исходному значению.

$updatedAt = $book->getUpdatedAt();
$book->setUpdatedAt(null);
$book->setUpdatedAt($updatedAt);

$book->setInStock(4);
$book->save();

В Symfony 1.2 это поведение добавляется в SfObjectBuilder :: addSave () и не может быть отключено (проверяется столбец с именем updated_at или updated_on). В Symfony 1.3 и 1.4 используются более новые версии Propel 1.4, поэтому я думаю, что вы должны явно добавить их, чтобы получить эффект. Тот же трюк работает, чтобы обойти обновление.

1 голос
/ 14 сентября 2009

Ну, похоже, это небольшое изменение работает:

$originalDate = $this->getUpdatedAt();
$this->save();

$this->setUpdatedAt($originalDate);
$this->save();

Но должен быть более элегантный способ, чтобы вам не приходилось делать два отдельных сохранения.

0 голосов
/ 13 сентября 2009

Обычно в Symfony, когда в таблице есть столбец с именем create_at , он используется для хранения метки времени даты создания записи. То же самое относится к updated_at столбцам, которые должны обновляться при каждом обновлении самой записи, до значения текущего времени.

Хорошей новостью является то, что Symfony распознает имена этих столбцов и обработает их обновления для вас. Вам не нужно вручную устанавливать столбцы create_at и updated_at ; они будут автоматически обновлены.

Если вы хотите сохранить информацию, другую create_at и updated_at , вам следует создать другое поле.

...