0

这必须很简单......我正在尝试保留已经存储在数据库中的updated_at字段中的当前日期。
我正在更新同一行中的单个字段值,然后保存,但我不希望它更新 updated_at 字段。 我想保留现有的 updated_at 值。

我只想在一种,也许两种情况下这样做,所以我不需要为程序中的所有其他操作覆盖模型。

我试过这个:

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

这似乎应该可以工作,但它似乎仍然更新了该字段。

4

3 回答 3

3

updated_at列仅在未更改的情况下设置为当前时间。这是用isColumnModified方法检查的。如果您首先将其更改为某个值,然后将其更改回原始值,您可以欺骗对象相信它已被修改。

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

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

在 Symfony 1.2 中,这个行为被添加到SfObjectBuilder::addSave()中,并且不能被禁用(它检查名为updated_ator的列updated_on)。在 Symfony 1.3 和 1.4 中,使用了 Propel 1.4 的较新行为,所以我认为您必须明确添加它们才能获得效果。同样的技巧可以规避更新。

于 2010-05-18T09:25:13.747 回答
1

好吧,似乎这个微小的变化有效:

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

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

但是必须有一种更优雅的方式,这样您就不必进行两次单独的保存。

于 2009-09-14T01:14:26.177 回答
0

在 symfony 中,通常,当一个表有一个名为created_at的列时,它用于存储记录创建日期的时间戳。这同样适用于updated_at列,每次更新记录本身时都会将其更新为当前时间的值。

好消息是 symfony 将识别这些列的名称并为您处理它们的更新。您不需要手动设置created_atupdated_at列;它们将自动更新。

如果您想保留其他created_atupdated_at信息,您应该创建另一个字段。

于 2009-09-13T10:17:52.950 回答