ダイナミックファインダーによる検索 (1/5)
作成:2013-11-09 11:21
更新: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側には、検索テキストを送信するフォームと、取得したレコードの一覧を表示するテーブルを用意してあります。これで基本的な枠組みは完成です。
Grailsで検索を行うとき、もっとも重要な機能が「ダイナミックファインダー」でしょう。これはドメインモデルのフィールド名(プロパティ名)などを元に自動的に生成される検索機能です。
Grailsでは、ドメインクラスとデータベーステーブルを関連付けるためのO/Rマッパーとして「GORM」というライブラリを用意しています。ダイナミックファインダーは、GORMのもっとも重要な機能なのです。このダイナミックファインダーをマスターすれば、検索の9割はおそらく実現できるはずです。
まずは、検索処理のための基本的な枠組みを作っておきましょう。「find」というアクションを用意することにしましょう。
下に、コントローラーに実装するfindメソッドのサンプルと、ビューテンプレートであるfind.gspのサンプルを挙げておきます。findメソッドは、とりあえず全レコードを取り出す処理を書いてあります。これを書き換えて、さまざまな検索を行ってみましょう。
find.gsp側には、検索テキストを送信するフォームと、取得したレコードの一覧を表示するテーブルを用意してあります。これで基本的な枠組みは完成です。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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>
※関連コンテンツ