スケルトンアプリケーションを作り、データベースの設計が終りました。 このセクションではブログデータベースを作成し、スケルトンアプリケーションの中でデータベースとの接続を確立します。
データベースは SQLite を使うことにします。 Yii のデータベースサポートは PDO の上に構築されているため、 アプリケーションコードを変更することなく、MySQL や PostgreSQL といった異なる DBMS を利用することができます。
ディレクトリ /wwwroot/blog/protected/data
にデータベースファイル blog.db
を作成します。
SQLite による要求として、ディレクトリとデータベースファイルの両方が Web サーバプロセスから書き込み可能である必要がある、ということに注意して下さい。
このデータベースの作成は、インストールされた Yii のブログデモから、データベースファイルをコピーしてくるだけで構いません。データベースファイルは /wwwroot/yii/demos/blog/protected/data/blog.db
にあります。
または、/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql
というファイルにある SQL 文を実行してデータベースを生成することも出来ます。
ヒント: SQL 文の実行には、SQLite 公式ウェブサイト にある
sqlite3
コマンドラインツールを利用できます。
作ったスケルトンアプリケーションでブログデータベースを使うには、/wwwroot/blog/protected/config/main.php
という PHP スクリプトに保存されている アプリケーション初期構成 を変更する必要があります。
このスクリプトは "名前-値" のペアで構成された連想配列を返します。これらの値は アプリケーションインスタンス の書き込み可能なプロパティを初期化するために使われます。
db
コンポーネントを以下のように構成します。
return array(
......
'components'=>array(
......
'db'=>array(
'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db',
'tablePrefix'=>'tbl_',
),
),
......
);
上記の設定は、このアプリケーションが db
アプリケーションコンポーネント を持っており、その connectionString
プロパティが sqlite:/wwwroot/blog/protected/data/blog.db
として初期化されるべきこと、および、tablePrefix
プロパティが tbl_
であるべきことを示しています。
この設定によって、アプリケーションのコードのどこからでも Yii::app()->db
を通じて DB 接続オブジェクトにアクセスすることができます。
Yii::app()
は、エントリスクリプトで作成されたアプリケーションインスタンスを返すことに注意して下さい。
DB 接続が持つことができるメソッドやプロパティに興味があれば、クラスリファレンス を参照して下さい。
しかし、多くの場合、この DB 接続を直接に利用することはありません。
その代りに、いわゆる アクティブレコード を使ってデータベースにアクセスします。
構成ファイルで設定した tablePrefix
プロパティについて、もう少し説明したいと思います。
これはデータベーステーブル名のプレフィクスとして tbl_
を使用していることを db
接続オブジェクトに伝えます。
具体的には、もし SQL 文の中に二重波括弧で囲まれたトークンがある場合(例えば {{post}}
)、db
接続は
それをテーブルプレフィクスを付けた名前(例えば tbl_post
)に変換してから、DBMS に送信して実行させます。
この機能は、将来テーブルプレフィクスを変更する必要が生じた場合でもソースコードを触る必要がない、という点で非常に有用です。
例えば、汎用のコンテンツ管理システム(CMS)を開発する場合、この機能を利用すると、CMS を新しい環境にインストールするときに
ユーザがテーブルプレフィクスを自由に選択できるようにすることが出来ます。
ヒント: もし SQLite ではなく MySQL をデータの格納に使いたい場合には、
/wwwroot/yii/demos/blog/protected/data/schema.mysql.sql
の SQL 文を使用して、blog
という名前の MySQL データベースを作成することが出来ます。 そして、アプリケーション初期構成ファイルを以下のように修正します。return array( ...... 'components'=>array( ...... 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=blog', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'tablePrefix' => 'tbl_', ), ), ...... );
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.