在我的擴展中,我有一組由用戶活動生成的操作。每個操作由幾個步驟組成。Extbase:爲併發訪問實現鎖定
爲了處理這些操作,我實現了一個調度程序任務(擴展「調度程序」6.2.0)。現在重點是:每個操作的步驟必須一個接一個地完成,而不是平行的。這意味着:在開始時,調度程序任務應該找到下一個「空閒」操作,將其鎖定並處理。
對於鎖定目的,帶有操作的數據庫表具有「isLocked」整數列。所以,我想用下面的SQL語句來鎖定操作:
$lockID = time(); 'UPDATE operations SET isLocked = '.$lockID.' WHERE isLocked = 0 AND uid = '.$freeOperationFound->getUid().';
「
這個SQL命令,我想檢查之後,如果鎖設置:
$repository->findOneByIsLocked($lockID);
如果鎖定了操作步驟成功處理可以開始。
如果與此同時調度程序任務的另一個實例鎖定此操作,則上面的SQL語句不會執行任何操作,因爲條件:WHERE isLocked = 0
。
問題是:Extbase忽略SQL UPDATE語句。
如果我只是通過庫更新自由操作對象,則可以覆蓋另一個任務實例的鎖定。我需要某種「有條件的」更新。
你怎麼稱呼你的SQL語句?爲什麼不使用extbase來更新對象?如果您沒有充分的理由不使用extbase並需要幫助,我會寫出詳細的答案。 – sven
問題是:我不能調用這個SQL語句,因爲Extbase忽略它。 如果我更新對象 - 我冒着覆蓋另一個實例的鎖的風險,該鎖設置它在我的讀寫操作之間鎖定。 - 是的! - 如果你能寫一些更多的細節,我將非常感激。 – firelex