這個問題可能過於寬泛,但。所以網站使用共同的數據庫,如果在第2行:PHP,請求時鎖定數據庫?
\Doctrine\Repository::getUser()->findById(1)
是好的,但該用戶可能會被刪除。所以6行之後,在第8行:
\Doctrine\Repository::getUser()->findById(1)
會拋出異常!一個通用的解決方案是在請求正在進行時阻止DELETE/UPDATE命令。但如何?
這個問題可能過於寬泛,但。所以網站使用共同的數據庫,如果在第2行:PHP,請求時鎖定數據庫?
\Doctrine\Repository::getUser()->findById(1)
是好的,但該用戶可能會被刪除。所以6行之後,在第8行:
\Doctrine\Repository::getUser()->findById(1)
會拋出異常!一個通用的解決方案是在請求正在進行時阻止DELETE/UPDATE命令。但如何?
在我的經驗,這是不好的做法,從數據庫中完全刪除任何數據。看作公司的大數據是一件重要的事情。所以我建議使用一個布爾值來「刪除」東西,這樣你就可以回頭看看用戶和其他東西。但是,如果你真的要刪除的用戶處理異常
應該去像
if(getUser->findById(1)){
getUser->findById(1);
}else{
return "some error message" ;
}
軟刪除恕我直言,這也是一種不好的做法。 – Federkun
誠然,我習慣了這樣的公司我在想它做這樣的工作,不是說這是理想的只是一種選擇。 – KevinTheGreat
修改例如,對於你的情況:
$em->getConnection()->beginTransaction(); // suspend auto-commit
try {
\Doctrine\Repository::getUser()->findById(1)
//... do some work
\Doctrine\Repository::getUser()->findById(1)
// you're done with that particular user
$em->getConnection()->commit();
} catch (Exception $e) {
$em->getConnection()->rollBack();
throw $e;
}
要小心,你的版本庫使用的EntityManager的正確的實例($em
)
另一種解決方案是處理例外。 – gbestard
或'SELECT FOR UPDATE'和東西 – Federkun
看看鎖定:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/transactions-and-concurrency.html – lxg