2012-09-13 48 views
0

我在我的cakephp項目中使用postgres數據庫。 我有一個數據表和一個名爲「狀態」的列表。 「狀態」它是枚舉,可以是「等待」,「in_progress」,「已完成」。如何在cakephp和postgres數據庫中進行行鎖定?

我的腳本必須得到狀態=等待的第一個找到的記錄,將狀態更改爲「in_progress」,並在一個原子過程中獲取此記錄的標識以及所有這些記錄。

將計算狀態更改爲「已完成」後,需要使用該id。 會有很多這樣的腳本平行工作,這就是爲什麼我需要這個簡單的「行鎖定」。

我第一次使用postgres數據庫 - 有沒有簡單的方法來完成這個? 也許蛋糕支持一些簡單的方法來做到這一點?

回答

1

使用CakePHP它沒有diffrence什麼樣的DB的你,只需使用$this->Model->find...修改狀態,然後「$這個 - >型號 - >保存....`

$row = $this->Model->find('first',array('conditions' => array('Model.status' => 'waiting'))); 
$row['Model']['status'] = 'in progress'; 
$this->Model->save($row); 
(...do something...) 

$row['Model']['status'] = 'completed'; 
$this->Model->save($row); 

propably要運行它在循環,並把某種const作爲狀態...

+0

但我需要一種交易 - 我必須做到原子... – user606521

+1

lern about transactions [here](http://book.cakephp。 org/2.0/en/models/transactions.html) –

+0

如果在狀態改變期間有任何操作,衝突依然存在。比方說,兩個請求進程的延遲很小,後一個請求進程在前一個進程保存狀態之前得到相同的記錄。因此如何確保記錄可以通過一個過程找到。 –

相關問題