libro
www.tuyano.com
初心者のためのGroovy/Grails入門

ダイナミックファインダーによる検索 (1/5)

作成:2013-11-09 11:21
更新:2013-11-09 11:21

■検索処理の準備を整えよう

データベースから必要なデータを取り出す――これはデータベース利用の基本です。これまで、「IDを指定して取り出す」「全部取り出す」といったことはやりましたが、それ以外の「何らかの条件を指定して取り出す」ということができないと困ります。

Grailsで検索を行うとき、もっとも重要な機能が「ダイナミックファインダー」でしょう。これはドメインモデルのフィールド名(プロパティ名)などを元に自動的に生成される検索機能です。

Grailsでは、ドメインクラスとデータベーステーブルを関連付けるためのO/Rマッパーとして「GORM」というライブラリを用意しています。ダイナミックファインダーは、GORMのもっとも重要な機能なのです。このダイナミックファインダーをマスターすれば、検索の9割はおそらく実現できるはずです。


まずは、検索処理のための基本的な枠組みを作っておきましょう。「find」というアクションを用意することにしましょう。

下に、コントローラーに実装するfindメソッドのサンプルと、ビューテンプレートであるfind.gspのサンプルを挙げておきます。findメソッドは、とりあえず全レコードを取り出す処理を書いてあります。これを書き換えて、さまざまな検索を行ってみましょう。

find.gsp側には、検索テキストを送信するフォームと、取得したレコードの一覧を表示するテーブルを用意してあります。これで基本的な枠組みは完成です。

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

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※コントローラーのfindメソッド

def find = {
    def fstr = params.fstr;
    def datas = SampleData.getAll();
    def arr = [
        'title':"Show All",
        'msg':"検索結果一覧です。",
        'datas':datas
    ];
    arr;
}


※find.gsp

<!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="mylayout" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Grails Hello</title>
</head>
<body>
    <h1>${title}</h1>
    <h2>${msg}</h2>
    <form method="post" action="create">
    <table>
    <tr><td>検索:</td><td><input type="text" name="fstr"></td></tr>
    <tr><td></td><td><input type="submit"></td></tr>
    </table>
    </form>
    <table>
    <g:each in="${datas}" status="i" var="data">
        <tr>
        <td>${data.name}</td>
        <td>${data.mail}</td>
        <td>${data.age}</td>
        </tr>
    </g:each>
    </table>
</body>
</html>

※関連コンテンツ

「初心者のためのGroovy/Grails入門」に戻る