2012-09-28 51 views
0

我在Symfony的1.4和1.4的Propel強制 '的updated_at' 用的Symfony /行走列變化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列未更新。

有沒有什麼辦法強制推動執行查詢,即使沒有記錄更新。

+0

是否要強制'extendMomentoLock'總是更新表,即使'LOCKED'&'LOCKEDBY'來自同以前的版本,對吧? – j0k

+0

是@ j0k你是對的。目前我正在做一個像創建一個新列,並增加它以確保'updated_at'的變化,我知道,這是一個不好的解決方案。理想的解決方案是更新'updated_at'列,而不管其他列是否更改。 –

+0

我想你正在使用Timestampable行爲,所以它只會在行上進行更改時更新日期字段。你有沒有嘗試明確地在'$ updatec'中添加updated_at列? – j0k

回答

1

我想你正在使用Timestampable行爲,所以它只會在行上執行更改時更新日期字段。

我認爲你可以使用基本的SQL語句強制更新:

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