
下記フォームに必要事項を入力後、確認ボタンを押してください。
この章では実際に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データベーステーブルの内容が表示されれば成功です。