2
我想執行這樣一個在symfony中使用的Propel ORM的查詢:用symfony增量更新/推進
UPDATE ADS SET HITS=HITS+1 WHERE ID=10;
我知道,行走API可以讓我的一列設置一個先前固定值給定記錄,但我絕對不希望在發出更新查詢之前先檢索列值,因爲存在併發訪問。
請問,我怎麼能做到這一點?
謝謝。
我想執行這樣一個在symfony中使用的Propel ORM的查詢:用symfony增量更新/推進
UPDATE ADS SET HITS=HITS+1 WHERE ID=10;
我知道,行走API可以讓我的一列設置一個先前固定值給定記錄,但我絕對不希望在發出更新查詢之前先檢索列值,因爲存在併發訪問。
請問,我怎麼能做到這一點?
謝謝。
如果你喜歡,你可以做一個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
嘗試這一點。
這個工作在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
邁克