2009-12-05 64 views
2

我想執行這樣一個在symfony中使用的Propel ORM的查詢:用symfony增量更新/推進

UPDATE ADS SET HITS=HITS+1 WHERE ID=10;  

我知道,行走API可以讓我的一列設置一個先前固定值給定記錄,但我絕對不希望在發出更新查詢之前先檢索列值,因爲存在併發訪問。

請問,我怎麼能做到這一點?

謝謝。

回答

0

如果你喜歡,你可以做一個Select using SQL推動。

下面是一個例子:

class BookPeer extends BaseBookPeer { 
    . 
    . 
    . 
    /** 
    * Get just the Books that have not been reviewed. 
    * @return array Book[] 
    */ 
    function getUnreviewedBooks() { 
    $con = Propel::getConnection(DATABASE_NAME); 

    // if not using a driver that supports sub-selects 
    // you must do a cross join (left join w/ NULL) 
    $sql = "SELECT books.* FROM books WHERE ". 
      "NOT EXISTS (SELECT id FROM review WHERE book_id = book.id)"; 

    $stmt = $con->createStatement(); 
    $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM); 

    return parent::populateObjects($rs);  
    } 

您可以update嘗試這一點。

1

這個工作在Symfony的1.3/1.4:

在AdsPeer

public static function incrementHits($id) 
{ 
    $con = Propel::getConnection(AdsPeer::DATABASE_NAME); 
    $query = 'UPDATE hits SET hits + 1 WHERE id = '.$id; 
    sfContext::getInstance()->getLogger()->crit($query); 
    $stmt = $con->prepare($query); 
    $rs = $stmt->execute(); 
} 

要使用:

AdsPeer::incrementHits($id); 

HTH

邁克