データ取得の詳細
モデルの組み込みメソッド find() を使用してデータベース テーブルからデータを取得する基本的な方法はすでに理解しています。 find() メソッドは確かに非常に強力で、これを使用して複雑なクエリを完了できます。 find() メソッドと、それを使用して複雑なクエリを実行する方法について詳しく学習します。また、CakePHP が提供する他のデータ取得テクニックの使用方法も学びます。
find() メソッドの詳細
find() メソッドは非常に柔軟で、SQL 言語の SELECT クエリ ステートメントによって得られるすべての結果を得ることができます。たとえば、タイトルが文字「A」で始まり、ISBN 番号の降順に並べられている最初の 2 冊の書籍番号フィールドと著者名フィールドのみを取得する場合、次の SQL クエリ ステートメントを記述する必要がありました。
SELECT `本`.`isbn`、`本`.`タイトル`、`本`.`著者名`
FROM `books` AS `本`
WHERE `本`.`タイトル` LIKE 'A%'
ORDER BY `Book`.`isbn` DESC
LIMIT 2;
CakePHP では、以下のように find() メソッドを使用して同じ結果を得ることができます。
find(
'all',
array(
'条件' => array('Book.title' => 'LIKE A%'),
'fields' => );
[ |
条件では、フィールドの前にモデル名を付けることをお勧めします (タイトルの代わりに Book.title など)。この習慣は、関連モデルからデータを呼び出す必要があり、結果が同じフィールド名を持つ場合に特に重要です。さらに、コードの鮮度も向上します
|
] |
テーブル>find() メソッドは、$type (タイプ) と $constraints (制約) の 2 つのパラメーターを受け入れます。 $type (type) は、クエリの「タイプ」を定義するために使用される文字列です。 $type は次の 3 つのタイプのいずれかに設定できます
- all: find メソッドは、指定された並べ替え方法と数制限に従って、条件を満たすすべてのレコードを返します。
- first: このメソッドは、制約
を満たす最初のレコードのみを返します。
- count: クエリ結果に含まれるレコードの合計数を返します。
前の例で見たように、2 番目のパラメーター $constraints に連想配列の形式で追加のクエリ制約を指定できます。 $constraints パラメータの連想配列には、次のキー (key)
を含めることができます。
- 条件: 条件を適用して、クエリ ステートメントの WHERE 句を置き換えることができます。デフォルト値は 1=1 で、条件制約がないことを意味します。
- fields: クエリ結果が返すフィールドの範囲。指定しない場合は、すべてのフィールドが返されます。 find() 関数の最初のパラメーター $type が count に設定されている場合、このパラメーターは使用できません。
- order: この文字列は、クエリ ステートメントの ORDER BY 句の内容を定義します。 order が指定されていない場合、ORDER BY 句は SQL クエリに追加されません。クエリ タイプは count であり、このパラメータも使用できません。
- limit: この整数は、返されるレコードの最大数を指定します。制限が指定されていない場合、関数は条件を満たすすべてのレコードを返します。クエリ タイプが all の場合にのみ使用できます。
- offset (オフセット値): このパラメータは、最初に返されるレコードのオフセット値を定義します。デフォルト値は 0 です。この設定は、type パラメータが all の場合にのみ有効です。
読者がこの概念をより明確に理解できるように、find() の使用法を示す次の例を簡単に見ていきます。
1. タイトルが文字「A」で始まる本の数を知りたい場合は、BooksController (書籍コントローラー) に次のコードを追加します。
$count = $this->Book->find('count', array('conditions' => A%'));次の SQL クエリを実行します。
次の SQL クエリを実行します
`Count` として count (*) を選択します。 from` Books` as `Book` ここで、
` `` `` `` `` 🎜 🎜 '
find() メソッドの $type パラメータが count に設定されている場合、クエリによって返される結果は整数です。この例では、$count 変数の値は 2 になる可能性があります。
2. 最大の ID を持つ書籍に対応する書籍番号 (ISBN) と書籍タイトルをクエリする場合は、次のコードを使用します
$book = $this->Book->find
('first', array( ) 'fields' => array('isbn', 'title ' )、 );
このコードは次の SQL ステートメントを実行します
SELECT `Book`.`isbn`, `Book`.`title` FROM `books` AS `Book`
WHERE 1 = 1 ORDER BY `Book`.`created` DESC LIMIT 1;
$book 変数に格納される結果は次のようになります:
Array
(
[Book] => Array
(
[isbn] => ; 1847192971
(
3. 特定の著者が書いた本を検索し、本のタイトルで並べ替えたい場合は、次のコードでこの目的を達成できます:
$books = $this->Book- > ;
find( 'all'、
'book.author_name' => 'like david barnes'
));
上記のコードは次の SQL クエリを実行します
SELECT `Book`.`title` FROM `books` AS `Book` WHERE `Book`.`author_
name` LIKE ' David Barnes '
`書籍`.`タイトル` ASC で注文
上記のクエリは次の結果を返します:
Array (
[0] => Array
(
[Book] => Array
) > =>
[ |
请注意,find()方法的$type参数分别被设置成 first和all时,返回的结果会有所区别。当它被设置成first时,返回的数组是一个关联数组,其中包含有书的信息。当类型参数被设置成all时, 返回的是一个关联数组的数组,每个关联数组内包含有一本书的相关信息
|
] |
上記の例では、find() メソッドで使用される非常に単純な条件制約をいくつか学習しました。実際のアプリケーションでは、クエリで使用される条件はさらに複雑で、多くのネストされた条件やさまざまな種類の論理演算子や条件演算子が含まれる場合があります。次に、$constraints パラメータの条件キーを見て、find() を使用して複雑な処理を行う方法を学びます。