明示的にテーブルロックを実装する処理を作ってみた。
使用環境
CakePHP2.x
MySQL
こんな感じです。AppModel.phpに追記します。
ついでにトランザクションも入れておきます。
たいていの場合はトランザクションだけで大丈夫かとは思います。
AppModel.php
<?php
App::uses('Model', 'Model');
class AppModel extends Model {
function begin() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$db->begin($this);
}
function commit() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$db->commit($this);
}
function rollback() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$db->rollback($this);
}
function Lock($type="WRITE"){
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$q = "LOCK TABLE {$this->useTable} {$type}, {$this->useTable} AS {$this->name} {$type};";
return $this->query($q);
}
function UnLock(){
return $this->query("UNLOCK TABLES");
}
}
