CakePHP3でSQLクエリを作成するパターンを纏めてみました。
そのSELECT編です。

find

$this->Hoges->find()
    ->where(条件)
    ->order(条件)
    ->order(条件)
    ->select(フィールド)
    ->all()

WHERE区の指定方法

AND条件A

$this->Hoges->find()->where(['Hoges.id' => 1, 'Hoges.name LIKE' => '%AAA%']);

AND条件B

$this->Hoges->find()->where(['Hoges.id' => 1])
						->where(['Hoges.name LIKE' => '%AAA%']);

出力されるSQLのWHERE区

WHERE Hoges.id = 1 AND Hoges.name LIKE '%AAAA%';

上記の記載は両方同じ出力。内部の条件はANDとなる。

OR条件A

$this->Hoges->find()->where(['OR' => ['Hoges.id' => 1, 'Hoges.name' => 'BBB']]);

出力されるSQLのWHERE区

WHERE Hoges.id = 1 AND Hoges.name LIKE '%AAAA%';

AND ORの複合条件

$this->Hoges->find()->where(['Hoges.id' => 1, 'OR' => [['Hoges.name LIKE' => '%AAAA%'], ['Hoges.name LIKE' => '%BBBB%']]]);

出力されるSQLのWHERE区

WHERE Hoges.id = 1 AND (Hoges.name LIKE '%AAAA%' OR Hoges.name LIKE '%BBBB%');

1件のみ取得する方法

基本的に指定が無ければ全件取得されてしまいます。
1件の指定方法には”first”を利用します。

firstを使った検索

$this->Hoges->find()->where(['Hoges.id' => 1])->first();

最後にfirst()を使用すればok。

ORDERによるソート

ORDER区による並び順も単純なので、簡単に記載します。
WHERE区に続けて、以下の記載でok。
カラム名とDESC/ASCを指定し、メソッドチェーンで複数指定が可能。

->order(['Hoges.id' => 'DESC']);

OFFSET, LIMIT

OFFSET, LIMITの記載方法も同様です。
WHERE区に続けて、以下の記載でok。
メソッドチェーンでlimit(), offset()に指定の数値を指定する。

->limit(100)->offset(100);

GROUP BY, HAVING

OFFSET, LIMITの記載方法も同様です。

->group(['Hoges.id'])->having(['Hoges.id >' => 100]);