🎉

CakePHP5 WEHE句でのbind

2024/01/27に公開

WHERE id NOT IN(SELECT id FROM xxx WHERE code=?) こんなクエリを作りたい

https://book.cakephp.org/5/ja/orm/database-basics.html#id15
ステートメントを準備する
あなたは execute() か prepare() でステートメントオブジェクトを生成できます。 execute() メソッドは引き継いだ値をバインドしたステートメントを返します。 それに対して prepare()
は不完全なステートメントを返します。

ConnectionManager::get('default') して、prepare して bind して... とあれこれ試してみたもののシンプルに書けなかった。

シンプルな方法

$rows = $this->Xxx->find('all')
->where('Xxx.id NOT IN (SELECT id FROM xxx WHERE code = :code)')
->bind(':code',$code,'integer');

プレースホルダ「?」として、bind にプレースホルダを指定しなくてもいい方法を探ったけど断念。。

誰か教えて。。

直感的にこう書きたい。。

->where('Xxx.id NOT IN (SELECT id FROM xxx WHERE code = ? AND code2 = ?)')
->bind([$code,$code2],['integer','integer']);

Discussion