CakePHPのORマッパーではselect for updateなど利用することはできません。
そのため、直接クエリを書いて実行する必要があります。
その時、引数で渡した値などを直接クエリ内に入れるとSQLインジェクション等のセキュリティホールになる可能性があります。これはプレースホルダを利用することで回避することができます。
ここでは、プレースホルダをCakePHPのquery関数で利用する方法を紹介します。
■以下のように記述します
// 検索条件構築
$query = "SELECT * FROM hogehoges as Hoge WHERE status = ? AND hoge_status = ? LIMIT 1 FOR UPDATE";
$resultInfo = $this->query($query, [1,2], false);
上記の例だと
hogehogesテーブルのstatusが1かつ、hoge_statusが2のものを1つ、FOR UPDATEを使ってロックして取得
ということになります。
ORマッパーを使わないで記述する時と同様に?が置換されていきます。そして、query関数の第2引数に置換するパラメータを設定します。こうすることで、ちゃんとエスケープされた文字列がバインドされてSQL実行されます。
第3引数はキャッシュの有効・無効となります。キャッシュが有効になっていると複数回実行された時に、二回目以降キャッシュの内容が返されるようになります。
ORマッパーが使えるときは、そっちを使ったほうがよいですが、どうしてもできない場合はqueryを使いましょう。では。