データベースのセットアップ

スケルトンアプリケーションを作り、データベースの設計が終りました。 このセクションではブログデータベースを作成し、スケルトンアプリケーションの中でデータベースとの接続を確立します。

1. データベースの作成

データベースは 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 コマンドラインツールを利用できます。

2. データベース接続を確立する

作ったスケルトンアプリケーションでブログデータベースを使うには、/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_',
        ),
    ),
      ......
);
$Id$

Be the first person to leave a comment

Please to leave your comment.