スケルトンアプリケーションを作り、データベースの設計が終わりました。 このセクションでは実際にブログデータベースを作成し、スケルトンアプリケーションとの接続を確立します。
データベースはSQLiteを使います。 Yiiのデータベースサポートは PDO の上に構築されているため、 アプリケーションコードを変更することなく、MySQLやPostgreSQLといった異なるDBMSを利用することができます。
ディレクトリ/wwwroot/blog/protected/dataにデータベースファイルblog.dbを作ります。
ディレクトリとファイルはともにWebサーバプロセスからSQLiteを通して書き込み可能である必要があります。
ここでは単に /wwwroot/yii/demos/blog/protected/data/blog.db にあるブログデモのデータベースファイルをコピーすることにします。
もしくは /wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql にある、SQLファイルを実行することでもデータベースを生成できます。
ヒント: SQL文の実行には、
sqlite3コマンドラインツールを利用できます。 詳しくは SQLite 公式ウェブサイトを参照してください。
作ったスケルトンアプリケーションでブログデータベースを使うには、/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 に初期化されることを示します。
この設定の場合、コードのどこからでも、Yii::app()->db を通じて DB コネクションオブジェクトにアクセスすることができます。
Yii::app() は、エントリスクリプトで作成されたアプリケーションインスタンスを返すことに注意して下さい。
DB コネクションのメソッドやプロパティに興味があれば、クラスリファレンスを参照して下さい。
しかし、多くの場合このDBコネクションを直接利用することはありません。
そのかわりにいわゆる ActiveRecord を利用してデータベースにアクセスします。
構成ファイルで設定したtablePrefixプロパティについて、もう少し説明したいと思います。
これはデータベーステーブル名のプリフィクスとしてtbl_を使用することをdbコネクションオブジェクトに伝えます。
具体的には、もしSQL文のなかにトークンがあり、それが2重ヒゲカッコ(例えば{{post}})で囲まれていた場合、dbコネクションは
実行のためにDBMSに送信する前にそれをテーブルプレフィクス(例えばtbl_post)に変換します。
この機能は、もし将来テーブルプリフィクスを変更することになっても、ソースコードを触る必要がないため非常に有用です。
例えば、コンテンツ管理システム(CMS)を開発しており、それが新しい環境にインストールされる場合に、ユーザはテーブルプリフィクスを自由に選択することが可能となります。
ヒント: もしSQLiteではなくMySQLをデータ格納に使う場合には、
blogという名前のMySQLデータベースを、/wwwroot/yii/demos/blog/protected/data/schema.mysql.sqlを使用して作成します。その後、アプリケーション構成ファイルを以下のように修正します。return array( ...... 'components'=>array( ...... 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=blog', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'tablePrefix' => 'tbl_', ), ), ...... );
Be the first person to leave a comment
Please login to leave your comment.