强制执行“updated_at”#39;使用Symfony / Propel 1.4更改列

时间:2012-09-28 11:06:48

标签: symfony-1.4 propel

我在Symfony 1.4和Propel 1.4中有一个现有的项目

对于新要求,我尝试了以下代码:

static public function extendMomentoLock($momentoId,$memberId)
{
    $wherec = new Criteria();
    $updatec = new Criteria();

    $updatec->add(MomentoPeer::LOCKED, 1);
    $updatec->addAnd(MomentoPeer::LOCKEDBY, $memberId);
    $wherec->add(MomentoPeer::ID, $momentoId, Criteria::EQUAL);

    $con = Propel::getConnection(MemberPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
    BasePeer::doUpdate($wherec, $updatec, $con);

    return "extended";
}

正如预期的那样,它生成了正确的查询,从日志中获取

UPDATE momento SET `LOCKED`=1, `LOCKEDBY`=6 WHERE momento.ID='198'

直到这里才有问题。

问题开始,因为我需要每3分钟运行一次此查询。规则是,如果记录在5分钟前更新,则行每5分钟自动解锁一次。要保持锁定,updated_at列必须少于5分钟,以便浏览器发送请求以保持记录锁定。

我希望查询更新updated_at列。但是,由于查询中没有更新,updated_at列未更新。

有没有办法强制推进执行查询,即使没有更新记录。

1 个答案:

答案 0 :(得分:1)

我猜您正在使用Timestampable行为,因此只有在对行执行更改时才会更新日期字段。

我认为您可以使用基本的SQL语句强制更新:

$updatec->addAnd(MomentoPeer::UPDATED_AT, 'NOW()');