明示的にテーブルロックを実装する処理を作ってみた。
使用環境
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"); } }