スポンサーリンク

[CakePHP2]テーブルロックを実装する

明示的にテーブルロックを実装する処理を作ってみた。

使用環境
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");
	}

}