下記フォームに必要事項を入力後、確認ボタンを押してください。
この章では実際にMVCモデルのモデルクラスとデータベースのSQLiteを使用してデータベースのデータを表示するモデルクラスの開発を進めていきます。モデルはデータベースのアクセスや操作を行うクラス前回controllerのみを使用したプログラムを作成しましたが、そのコントローラを使用して作成を進めていきます。
-- -- Create a very simple database to hold book and author information -- PRAGMA foreign_keys = ON; CREATE TABLE book ( id INTEGER PRIMARY KEY, title TEXT , review TEXT , rating INTEGER, price INTEGER, published BLOB ); -- 'book_author' is a many-to-many join table between books & authors CREATE TABLE book_author ( book_id INTEGER REFERENCES book(id) ON DELETE CASCADE ON UPDATE CASCADE, author_id INTEGER REFERENCES author(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (book_id, author_id) ); CREATE TABLE author ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); --- --- Load some sample data --- INSERT INTO book VALUES (1, 'CCSP SNRS Exam Certification Guide','Very Good',5,5000,'2010-10-1'); INSERT INTO book VALUES (2, 'TCP/IP Illustrated, Volume 1','Very Good', 5,1200,'2009-10-1'); INSERT INTO book VALUES (3, 'Internetworking with TCP/IP Vol.1','Good', 4,2200,'2008-5-5'); INSERT INTO book VALUES (4, 'Perl Cookbook','Good', 5,800,'2014-2-5'); INSERT INTO book VALUES (5, 'Designing with Web Standards','Very Good',5,3200,'2011-6-7'); INSERT INTO author VALUES (1, 'Greg', 'Bastien'); INSERT INTO author VALUES (2, 'Sara', 'Nasseh'); INSERT INTO author VALUES (3, 'Christian', 'Degu'); INSERT INTO author VALUES (4, 'Richard', 'Stevens'); INSERT INTO author VALUES (5, 'Douglas', 'Comer'); INSERT INTO author VALUES (6, 'Tom', 'Christiansen'); INSERT INTO author VALUES (7, 'Nathan', 'Torkington'); INSERT INTO author VALUES (8, 'Jeffrey', 'Zeldman'); INSERT INTO book_author VALUES (1, 1); INSERT INTO book_author VALUES (1, 2); INSERT INTO book_author VALUES (1, 3); INSERT INTO book_author VALUES (2, 4); INSERT INTO book_author VALUES (3, 5); INSERT INTO book_author VALUES (4, 6); INSERT INTO book_author VALUES (4, 7); INSERT INTO book_author VALUES (5, 8);保存したクエリをデータベースに取り込み、データベースを作成します。コマンドブロンプトを開きチェンジディレクトリでSqliteフォルダに移動してsqlite3を開きます。SQliteアプリケーションに接続したことを確認し[SQlite3]コマンドを入力して次のコマンドを入力してデータベースファイルを作成します。
$ sqlite3 cataldb.db < cataldb.sqlデータベースが作成されたことを確認したら、データベースの確認を行います。次のコマンドでデータベーステーブルの確認を行ってください。
sqlite> .open cataldb.db sqlite> .table authors book_authors books sqlite> .table sqlite> select * from books; 1|CCSP SNRS Exam Certification Guide|5 2|TCP/IP Illustrated, Volume 1|5 3|Internetworking with TCP/IP Vol.1|4 4|Perl Cookbook|5 5|Designing with Web Standards|5データベースの中身を確認したら[ctrlキー+C]を押しSQliteを閉じます。作成した[データベース名.db]はCatalystプロジェクトの[script]フォルダにコピーをして設置します。今回は[C:\data2\Hello\script]フォルダに設置をします。
C:\data\Hello\script>hello_create.pl controller request exists "C:\data\Hello\lib\Hello\Controller" exists "C:\data\Hello\t" created "C:\data\Hello\lib\Hello\Controller\request.pm" created "C:\data\Hello\t\controller_request.t" C:\data\Hello\script>これでコントローラクラスが作成されました。ではコントローラクラスを開き次のプログラムを入力してください。
sub list :Local { my ( $self, $c ) = @_; $c->stash->{list1}=[$c->model('CatalDB::Book')->all]; $c->stash->{list2}=[$c->model('CatalDB::BookAuthor')->all]; $c->stash->{list3}=[$c->model('CatalDB::Author')->all]; }
hello_create.pl モデル名 データベース名 スキーマクラス名スキーマークラスはデータベーススキーマを作成するために使用されます。DBIx :: Class :: Schema :: Loaderを使用してデータベースを読み込み必要なファイルを自動的にビルドします。スキーマクラスでは次のコマンドを指定します。 ●DBlib/MyApp/Model:ディレクトリ内のヘルパーによって作成されるモデルクラスの名前です。 ●DBIC::Schema:作成するモデルのタイプです。これは、Catalystの中でDBICベースのモデルを使用する標準的な方法であるCatalyst :: Model :: DBIC :: Schemaに相当します。 ●MyApp::Schema:書き込まれるDBICスキーマファイルの名前ですlib/MyApp/Schema.pm。 ●create=static:原因DBIx ::クラス::スキーマ::ローダーを、それが実行され、その後にその情報を書き出すようスキーマをロードするlib/MyApp/Schema.pmと、下のファイルlib/MyApp/Schemaのディレクトリ。 ●dbi:SQLite:myapp.db SQLiteで使用する標準のDBI接続文字列です。 ●on_connect_doh:DBIx :: Class :: Schema :: Loaderが私たちのために外部キー関係を作成することを文字列で要求します。
C:\data2\Hello\script>hello_create.pl model CatalDB DBIC::Schema Hello::Schema c reate=static dbi:SQLite:cataldb.db on_connect_do="PRAGMA foreign_keys = ON" exists "C:\data2\Hello\lib\Hello\Model" exists "C:\data2\Hello\t" Dumping manual schema for Hello::Schema to directory C:\data2\Hello\lib ... Schema dump completed. exists "C:\data2\Hello\lib\Hello\Model\CatalDB.pm" created "C:\data2\Hello\lib\Hello\Model\CatalDB.pm.new" exists "C:\data2\Hello\t\model_CatalDB.t"C:\data\Catal\lib\Catal\Schema\Resultにデータベーススキーマファイルが作成されていればデータベースへのアクセスが成功していることがわかります。
[list.ttファイル] <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="stylesheet.css" > <meta charset="UTF-8"> <title>モデルの基本</title> </head> <body> <table border="1"> <tr> <th>書籍ID</th><th>書籍名</th><th>レーティング</th> </tr> [% FOREACH item = list %] <tr> <th>[% item.id %]</th> <th>[% item.name %]</td> <th>[% item.rating %]</td> </tr> </table> </body> </html>最後に開発Webサーバを起動してウェブブラウザのアドレスに http://localhost:3000/hello/list と入力して表示を確認してください。 Sqliteデータベーステーブルの内容が表示されれば成功です。