【Table】データの取り出し

クエリの生成

findメソッド

findメソッドでクエリを生成。

<?php
$query = $articles->find('all'); // この時点ではクエリーは走らない。

$results = $query->all(); // all() の呼び出しはクエリーを実行し、結果セットを返す
foreach ($query as $row) {...} // イテレーションはクエリーを実行する
?>

第一引数

<?php
// 全件取得
$query = $articles->find('all'); 

// データを連想配列として取得
$query = $articles->find('list', [
    'keyField' => 'slug', // キーを指定 デフォルトではid
    'valueField' => 'title' // 値を指定 デフォルトではdisplayFieldで指定された列
]);
// 取得結果
// $query->toArray() = [
//    'first-post' => '最初の投稿',
//    'second-article-i-wrote' => '私が書いた2つ目の記事',
// ];

// スレッド状のデータを取得
$query = $articles->find('thread');

?>
カスタムFinder

findFooBarメソッドによって、fooBarという名前のカスタムfinderが作れる。

<?php
public function findOwnedBy(Query $query, array $options)
{
    $user = $options['user'];
    return $query->where(['author_id' => $user->id]);
}

$query = $articles->find('ownedBy', ['user' => $userEntity]); // 呼び出し
?>

クエリの実行

クエリ実行パターン① findの第二引数にオプションを指定する
<?php
$query = $articles->find('all', [
    'conditions' => ['Articles.created >' => new DateTime('-10 days')],
    'contain' => ['Authors', 'Comments'],
    'limit' => 10
]);
?>

findで使えるオプション

  • conditions WHERE
  • limit LIMIT
  • offset 指定した整数番目からデータを取得する
  • contain 関連をイーガーロード (eager load) する
  • fields 列を指定する
  • group GROUP BY
  • having HAVING
  • join JOIN
  • order ORDER BY
クエリ実行パターン② クエリオブジェクトにメソッドを呼び出す
<?php
$articles->find('all')->first(); // 最初のレコードを取得
$articles->find('all')->count(); // レコードの件数を取得
$articles->find('list')->toArray(); // レコードを連想配列として取得
?>