回答編集履歴

2 補足

popobot

popobot score 6451

2016/09/16 15:50  投稿

こんな感じでしょうか
```php
$sub_query = $this->Table->find()->select(['seq']);
$query = $this->Table->find();
$notIn = $query->newExpr()->notIn('seq + 1', $sub_query);
$result = $query
 ->select(['gap' => $query->func()->min('seq + 1')])
 ->where($notIn)
 ->first();
```
※自分でも初めてやってみたので、ミスってたらごめんなさい。自分の環境では一応うまく動きました。  
※あまり複雑なSQLはfindでやるより、直接SQLを実行したほうがいいと思います。
 集計系などは、あとでSQLチューニングする可能性も考慮して、だいたい直接SQLを実行しています。
[Cakeマニュアルのサブクエリ](http://book.cakephp.org/3.0/ja/orm/query-builder.html#id20)
1 補足

popobot

popobot score 6451

2016/09/16 15:49  投稿

こんな感じでしょうか
```php
$sub_query = $this->Table->find()->select(['seq']);
$query = $this->Table->find();
$notIn = $query->newExpr()->notIn('seq + 1', $sub_query);
$result = $query
 ->select(['gap' => $query->func()->min('seq + 1')])
 ->where($notIn)
 ->first();
```
※あまり複雑なSQLはfindでやるより、直接SQLを実行したほうがいいと思います。  
 集計系などは、あとでSQLチューニングする可能性も考慮して、だいたい直接SQLを実行しています。  
[Cakeマニュアルのサブクエリ](http://book.cakephp.org/3.0/ja/orm/query-builder.html#id20)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る