CakePHPにおけるfindとgetの違い

1. get()

get はuniqueに存在しているprimary keyで検索する。 そのため、primary keyが存在しない場合はエラーを吐く。

以下のコードは【cakePHP】データ抽出 findとgetの違いは何?からコピペしたものです。

// コントローラやテーブルのメソッド内で

// 単一の article を取得する
$article = $articles->get($id);

// 単一の article と、それに関連する comment を取得する。
$article = $articles->get($id, [
    'contain' => ['Comments']
]);

2. find()

find はエンティティを返す。ちなみに以下のコードだけでは何もクエリは実行されていないそう。

ドキュメントにも

The return value of any find() method is always a Cake\ORM\Query object.

と書いてあるようにCake\ORM\Queryを返す。

$query = $articles->find('all');

ドキュメントからコピペしてきたものだが、以下のようにクエリは実行される。

// イテレーションはクエリを実行する
foreach ($query as $row) {
}

// all() の呼び出しはクエリを実行し、結果セットを返す
$results = $query->all();

// 結果セットがあれば すべての行を取得できる
$data = $results->toArray();

// クエリから配列への変換はクエリを実行する
$results = $query->toArray();

参考サイト

【cakePHP】データ抽出 findとgetの違いは何?

CakePHP3のORMにおけるget()とfind()の違い

Using Finders to Load Data¶