データベースのセットアップ =================== スケルトンアプリケーションを作り、データベースの設計が終りました。 このセクションではブログデータベースを作成し、スケルトンアプリケーションの中でデータベースとの接続を確立します。 データベースの作成 ----------------- データベースは SQLite を使うことにします。 Yii のデータベースサポートは [PDO](http://www.php.net/manual/en/book.pdo.php) の上に構築されているため、 アプリケーションコードを変更することなく、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 文を実行してデータベースを生成することも出来ます。 > Tip|ヒント: SQL 文の実行には、[SQLite 公式ウェブサイト](http://www.sqlite.org/download.html) にある `sqlite3` コマンドラインツールを利用できます。 データベース接続を確立する -------------------------------- 作ったスケルトンアプリケーションでブログデータベースを使うには、`/wwwroot/blog/protected/config/main.php` という PHP スクリプトに保存されている [アプリケーション初期構成](http://www.yiiframework.com/doc/guide/ja/basics.application#sec-2) を変更する必要があります。 このスクリプトは "名前-値" のペアで構成された連想配列を返します。これらの値は [アプリケーションインスタンス](http://www.yiiframework.com/doc/guide/ja/basics.application) の書き込み可能なプロパティを初期化するために使われます。 `db` コンポーネントを以下のように構成します。 ~~~ [php] return array( ...... 'components'=>array( ...... 'db'=>array( 'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db', 'tablePrefix'=>'tbl_', ), ), ...... ); ~~~ 上記の設定は、このアプリケーションが `db` [アプリケーションコンポーネント](http://www.yiiframework.com/doc/guide/ja/basics.application#sec-4) を持っており、その `connectionString` プロパティが `sqlite:/wwwroot/blog/protected/data/blog.db` として初期化されるべきこと、および、`tablePrefix` プロパティが `tbl_` であるべきことを示しています。 この設定によって、アプリケーションのコードのどこからでも `Yii::app()->db` を通じて DB 接続オブジェクトにアクセスすることができます。 `Yii::app()` は、エントリスクリプトで作成されたアプリケーションインスタンスを返すことに注意して下さい。 DB 接続が持つことができるメソッドやプロパティに興味があれば、[クラスリファレンス|CDbConnection] を参照して下さい。 しかし、多くの場合、この DB 接続を直接に利用することはありません。 その代りに、いわゆる [アクティブレコード](http://www.yiiframework.com/doc/guide/ja/database.ar) を使ってデータベースにアクセスします。 構成ファイルで設定した `tablePrefix` プロパティについて、もう少し説明したいと思います。 これはデータベーステーブル名のプレフィクスとして `tbl_` を使用していることを `db` 接続オブジェクトに伝えます。 具体的には、もし SQL 文の中に二重波括弧で囲まれたトークンがある場合(例えば `{{post}}`)、`db` 接続は それをテーブルプレフィクスを付けた名前(例えば `tbl_post`)に変換してから、DBMS に送信して実行させます。 この機能は、将来テーブルプレフィクスを変更する必要が生じた場合でもソースコードを触る必要がない、という点で非常に有用です。 例えば、汎用のコンテンツ管理システム(CMS)を開発する場合、この機能を利用すると、CMS を新しい環境にインストールするときに ユーザがテーブルプレフィクスを自由に選択できるようにすることが出来ます。 > Tip|ヒント: もし SQLite ではなく MySQL をデータの格納に使いたい場合には、 > `/wwwroot/yii/demos/blog/protected/data/schema.mysql.sql` の SQL 文を使用して、`blog` という名前の MySQL データベースを作成することが出来ます。 > そして、アプリケーション初期構成ファイルを以下のように修正します。 > > ~~~ > [php] > return array( > ...... > 'components'=>array( > ...... > 'db'=>array( > 'connectionString' => 'mysql:host=localhost;dbname=blog', > 'emulatePrepare' => true, > 'username' => 'root', > 'password' => '', > 'charset' => 'utf8', > 'tablePrefix' => 'tbl_', > ), > ), > ...... > ); > ~~~
$Id$