INだけだとググラビリティ低くて情報に行き着くまで時間がかかったのでQiitaにも載せておきます。
今後こういう記事を幾つか書くと思います。
Where In
http://book.cakephp.org/3.0/en/orm/query-builder.html#automatically-creating-in-clauses
use Cake\ORM\TableRegistry;
$users = TableRegistry::get('User')->find()
->where(['User.id IN' => [1, 2, 3]])
->all();
CakePHP2.x系までは条件式のvalueに配列を指定すると自動的にINに切り替わりましたが、
CakePHP3.x系ではbooleanとして解釈され1に変換されます。
idが1のデータが存在するとデータが取れてしまうため案外気付きにくい箇所かもしれません。
Where Not
http://book.cakephp.org/3.0/en/orm/query-builder.html#automatic-is-not-null-creation
use Cake\ORM\TableRegistry;
// IS NOT
$users = TableRegistry::get('User')->find()
->where(['User.id IS NOT' => 1])
->all();
// !=
$users = TableRegistry::get('User')->find()
->where(['User.id !=' => 1])
->all();
// INの時
$users = TableRegistry::get('User')->find()
->where([
'NOT' => ['User.id IN' => [1, 2, 3]]
])
->all();
CakePHP2.x系と同じような否定式が使えます。
INの時はNOTをキーにしてその下に条件式を配置してあげれば上手くいきます。