データを検索する (4/4)
作成:2011-11-21 08:19
更新:2011-12-06 19:41
更新:2011-12-06 19:41
■findの第2パラメータ
問題は、findメソッドの第2引数のパラメータ設定です。第2引数には、検索に関する細かな設定情報が連想配列の形でまとめられます。ここに用意できる項目には以下のようなものがあります。
‘conditions’――検索条件の設定をするものです。検索する項目名をキーにして、検索テキストを値に設定した連想配列を指定します。
‘fields’――取得する項目の名前を配列で指定します。
‘recursive’――再帰的に取得する深度の指定です。単純に1つのテーブルからデータを探すだけなら不要です。
‘order’――並び順です。並び順をチェックする項目順に、項目名を配列でまとめます。
‘limit’――取り出す最大項目数です。
‘page’――ページ番号です。limitで指定した個数を1ページとして、何ページ目のデータを取り出すか指定します。
‘offset’――データの取得を開始する番号(いくつ目から取り出すか)を指定します。
これらの中でもっとも重要なのはconditionsでしょう。これはデータを検索する条件を設定するもので、もっとも重要なものです。これは、実例を見たほうが早いでしょう。下に、findアクションのサンプルコードを掲載しておきました。MySampleDatasControllerクラスにfindメソッドを追加し、「View」の「MySampleDatas」フォルダ内に「find.ctp」ファイルを作成してビューを記述してください。
このサンプルでは、ID番号を入力して送信すると、その番号のデータを表示します。パラメータ設定の連想配列を見ると、以下のように条件が設定されています。
では、イコールでない場合は? 例えば不等号を使ってx < yのように「〇〇より大きいもの、小さいもの」を検索するならどうなるのでしょうか。これは、
とりあえず、これでデータの検索はできるようになりました。いろいろと条件を設定してデータの検索を行なってみましょう!
‘conditions’――検索条件の設定をするものです。検索する項目名をキーにして、検索テキストを値に設定した連想配列を指定します。
‘fields’――取得する項目の名前を配列で指定します。
‘recursive’――再帰的に取得する深度の指定です。単純に1つのテーブルからデータを探すだけなら不要です。
‘order’――並び順です。並び順をチェックする項目順に、項目名を配列でまとめます。
‘limit’――取り出す最大項目数です。
‘page’――ページ番号です。limitで指定した個数を1ページとして、何ページ目のデータを取り出すか指定します。
‘offset’――データの取得を開始する番号(いくつ目から取り出すか)を指定します。
これらの中でもっとも重要なのはconditionsでしょう。これはデータを検索する条件を設定するもので、もっとも重要なものです。これは、実例を見たほうが早いでしょう。下に、findアクションのサンプルコードを掲載しておきました。MySampleDatasControllerクラスにfindメソッドを追加し、「View」の「MySampleDatas」フォルダ内に「find.ctp」ファイルを作成してビューを記述してください。
このサンプルでは、ID番号を入力して送信すると、その番号のデータを表示します。パラメータ設定の連想配列を見ると、以下のように条件が設定されています。
'conditions' => array('MySampleData.id' => $id)MySampleDataモデルクラスのidが$idのデータを検索する、という設定です。このように特定の項目の値を指定して検索する場合、「’モデル名.項目名’ => 値」というように連想配列を用意しておきます。テーブル名ではなく、モデル名なので注意しましょう。
では、イコールでない場合は? 例えば不等号を使ってx < yのように「〇〇より大きいもの、小さいもの」を検索するならどうなるのでしょうか。これは、
'conditions' => array('MySampleData.id <' => $id)こうなります。連想配列のキーワードのテキストに、'MySampleData.id <'というように設定されていることがわかるでしょう。このようにすることで不等号を指定することができます。テキストの「あいまい検索」の場合なら、「like」を最後につければいいでしょう。
とりあえず、これでデータの検索はできるようになりました。いろいろと条件を設定してデータの検索を行なってみましょう!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※MySampleDatasController.phpのメソッド function find(){ $this->layout = "SamplMe"; $this->set("header_for_layout", "Sample Application"); $this->set("footer_for_layout", "copyright by SYODA-Tuyano. 2011."); if (isset($this->data['id'])){ $id = $this->data['id']; $status = array( 'conditions' => array('MySampleData.id' => $id) ); $data = $this->MySampleData->find('first', $status); } else { $data = null; } $this->set('data',$data); } ※find.ctp <h1>Index Page</h1> <p>MySampleData Find View.</p> <form method="post" action="./find"> ID:<input type="text" name="id" /> <input type="submit" /> </form> <table> <?php if (isset($data)): ?> <tr> <td>Name:</td> <td><?php echo $data['MySampleData']['name']; ?></td> </tr> <tr> <td>Mail:</td> <td><?php echo $data['MySampleData']['mail']; ?></td> </tr> <tr> <td>Tel:</td> <td><?php echo $data['MySampleData']['tel']; ?></td> </tr> <?php endif; ?> </table>
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る