libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

データを検索する (4/4)

作成:2011-11-21 08:19
更新: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番号を入力して送信すると、その番号のデータを表示します。パラメータ設定の連想配列を見ると、以下のように条件が設定されています。
'conditions' => array('MySampleData.id' => $id)
MySampleDataモデルクラスのid$idのデータを検索する、という設定です。このように特定の項目の値を指定して検索する場合、「’モデル名.項目名’ => 値」というように連想配列を用意しておきます。テーブル名ではなく、モデル名なので注意しましょう。

では、イコールでない場合は? 例えば不等号を使ってx < yのように「〇〇より大きいもの、小さいもの」を検索するならどうなるのでしょうか。これは、
'conditions' => array('MySampleData.id <' => $id)
こうなります。連想配列のキーワードのテキストに、'MySampleData.id <'というように設定されていることがわかるでしょう。このようにすることで不等号を指定することができます。テキストの「あいまい検索」の場合なら、「like」を最後につければいいでしょう。

とりあえず、これでデータの検索はできるようになりました。いろいろと条件を設定してデータの検索を行なってみましょう!

※プログラムリストが表示されない場合

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 プログラミング入門」に戻る