2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CakePHP データ取得の方法(get・find)

Last updated at Posted at 2020-12-24

CakePHPのデータ取得の方法についてまとめました。

そもそもTable/Entityとは

こちらが参考になりました。
https://qiita.com/tatsuo-iriyama/items/87097069013ac9df1ed9

テーブル
データのコレクションにアクセスして、レコードの追加・更新・削除やリレーションの定義のためのオブジェクト

エンティティ
個々のレコードを指す、レコードの振る舞いや機能を定義する
カラムに対しても処理可能

上記を踏まえてCakePHPのデータ取得とは

エンティティを検索したりロードしたりする事を指している。
(データ取得の手段として挙げるメソッドでコレクションとエンティティを返している)

メソッド一覧

参考:
https://book.cakephp.org/3/ja/orm/retrieving-data-and-resultsets.html

get
単一のエンティティーを取得する
データが見つからなければ404エラーを返す
この中でカスタムファインダーを使用することも可能

$article = $articles->get($id, [
    'finder' => 'translations',
]);

find
ファインダーをロードする
戻り値は常にQueryオブジェクト
実際にクエリが走るのはfind()の実行時ではなく、これの戻り値であるQueryオブジェクトから更に別のメソッドを呼び出す時になる

//クエリは走らない
$query = $articles->find('all'); 

//クエリが走る
$query = $articles->find('all')
    ->where(['Articles.created >' => new DateTime('-10 days')])
    ->contain(['Comments', 'Authors'])
    ->limit(10);

クエリが走る=クエリービルダーインターフェイスを使用する事ができる
これでより複雑なクエリを構築できる。
クエリービルダーインターフェイスを呼び出した後の戻り値はエンティティーになる。

オプション一覧

conditions クエリーの WHERE 句に使う条件を提供します。

limit 欲しい行数をセットします。

offset 欲しいページオフセットをセットします。 page をあわせて使うことで計算を簡単にできます。

contain 関連をイーガーロード (eager load) するように定義します。

fields エンティティーへとロードされる列を制限します。いくつかの列だけがロードされることになるので エンティティーが正しく動かないこともありえます。

group クエリーに GROUP BY 句を加えます。集約関数を使う際に便利です。

having クエリーに HAVING 句を加えます。

join カスタム JOIN を追加で定義します。

order 結果セットに並び順を設定します。

ここに無いオプションを使用した場合、beforeFind リスナに渡されオブジェクトの変更が行われる。
また、クエリーオブジェクトの getOptions()で、利用中のオプションを取得する事ができる。らしい
(利用中のオプション、という記載が公式にあったけど利用中が何を指すのかわからない、、)

クエリーオブジェクトをコントローラーに渡すより、カスタムファインダーメソッドを使用する事がおすすめと公式より。

カスタムファインダーメソッドについては別の記事にした方が良さそうだけど、クエリービルダーインターフェイスのメソッドは下記など、、

first()
count()
list()
setDisplayField()

他多数

まとめ

以上、データ取得のための方法はget・findが主ですが、特にfindは戻り値のクエリーオブジェクトの方でかなりたくさんのメソッドが存在するようなので、実際に使うにはそちらも整理しないとと感じました。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?