事象
サブクエリにてunionAll()を使用するとSyntax Erorになる。
元になったORM
$query->where(['id in' => TableRegistry::getTableLocator()
->get('テーブル2')
->find()
->select('id')
->unionAll(
TableRegistry::getTableLocator()
->get('テーブル3')
->find()
->select('id')
)
生成されたクエリ
SELECT * FROM テーブル
WHERE id in ((SELECT id FROM テーブル2 )
UNION ALL (SELECT id FROM テーブル3);
(SELECT id FROM テーブル2 )
この()がなくなるとSyntax Errorではなくなる
対策
OR句を使用すること。
パフォーマンスもそんなに変わらんし、その方が素直な実装になるでしょう。
それにしてもORMとの格闘は大変だ。