Yii ブログシステム作成(3)

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

■データベース作成

データベース『db_blog』を作成後、下記のクエリを実行。
※demos\blog\protected\data\schema.mysql.sql参照

CREATE TABLE tbl_lookup
(
  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(128) NOT NULL,
  code INTEGER NOT NULL,
  type VARCHAR(128) NOT NULL,
  position INTEGER NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE tbl_user
(
  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(128) NOT NULL,
  password VARCHAR(128) NOT NULL,
  email VARCHAR(128) NOT NULL,
  profile TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE tbl_post
(
  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(128) NOT NULL,
  content TEXT NOT NULL,
  tags TEXT,
  status INTEGER NOT NULL,
  create_time INTEGER,
  update_time INTEGER,
  author_id INTEGER NOT NULL,
  CONSTRAINT FK_post_author FOREIGN KEY (author_id)
    REFERENCES tbl_user (id) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE tbl_comment
(
  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  content TEXT NOT NULL,
  status INTEGER NOT NULL,
  create_time INTEGER,
  author VARCHAR(128) NOT NULL,
  email VARCHAR(128) NOT NULL,
  url VARCHAR(128),
  post_id INTEGER NOT NULL,
  CONSTRAINT FK_comment_post FOREIGN KEY (post_id)
    REFERENCES tbl_post (id) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE tbl_tag
(
  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(128) NOT NULL,
  frequency INTEGER DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO tbl_lookup (name, type, code, position) VALUES ('Draft', 'PostStatus', 1, 1);
INSERT INTO tbl_lookup (name, type, code, position) VALUES ('Published', 'PostStatus', 2, 2);
INSERT INTO tbl_lookup (name, type, code, position) VALUES ('Archived', 'PostStatus', 3, 3);
INSERT INTO tbl_lookup (name, type, code, position) VALUES ('Pending Approval', 'CommentStatus', 1, 1);
INSERT INTO tbl_lookup (name, type, code, position) VALUES ('Approved', 'CommentStatus', 2, 2);

INSERT INTO tbl_user (username, password, email) VALUES ('demo','$2a$10$JTJf6/XqC94rrOtzuF397OHa4mbmZrVTBOQCmYD9U.obZRUut4BoC','webmaster@example.com');
INSERT INTO tbl_post (title, content, status, create_time, update_time, author_id, tags) VALUES ('Welcome!','This blog system is developed using Yii. It is meant to demonstrate how to use Yii to build a complete real-world application. Complete source code may be found in the Yii releases.

Feel free to try this system by writing new posts and posting comments.',2,1230952187,1230952187,1,'yii, blog');
INSERT INTO tbl_post (title, content, status, create_time, update_time, author_id, tags) VALUES ('A Test Post', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 2,1230952187,1230952187,1,'test');

INSERT INTO tbl_comment (content, status, create_time, author, email, post_id) VALUES ('This is a test comment.', 2, 1230952187, 'Tester', 'tester@example.com', 2);

INSERT INTO tbl_tag (name) VALUES ('yii');
INSERT INTO tbl_tag (name) VALUES ('blog');
INSERT INTO tbl_tag (name) VALUES ('test');

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

blog/protected/config/main.php50行目付近を編集

    // ↓↓↓コメントアウトする↓↓↓
    /*
    'db'=>array(
      'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
    ),
    */
    // ↓↓↓コメントアウト解除して設定情報を記述↓↓↓
    'db'=>array(
      'connectionString' => 'mysql:host=localhost;dbname=db_blog',
      'emulatePrepare' => true,
      'username' => 'ユーザー名',
      'password' => 'パスワード',
      'charset' => 'utf8',
      'tablePrefix' => 'tbl_',
    ),

データベース接続について

この設定によって、アプリケーションのコードのどこからでも【Yii::()->db】を通じてDB接続オブジェクトにアクセスする事ができる。
【Yii::app()】は、エントリスクリプトで作成されたアプリケーションインスタンスを返すことに注意すること。
データベースにはアクティブレコードを使ってデータベースにアクセスする。

DB接続を直接に利用することがある際はクラスリファレンスを参照

テーブルプレフィックス(tablePrefix)について

データベーステーブル名のプレフィックス(tablePrefix)として"tbl_"を使用していることをDB接続オブジェクトに伝える。

もし、SQL文の中に2重波括弧で囲まれたトークンがある場合(例:{{post}})、DB接続はそれをテーブルプレフィックスをつけた名前に
返還してからDBMSに送信して実行させる。

この機能は、将来テーブルプレフィックスを変更する必要が生じた場合でもソースコードを触る必要がない、という点で有用である。
例として、汎用コンテンツ管理システムを開発する場合、この機能を利用すると、CMSを新しい環境にインストールするときに
ユーザーがテーブルプレフィックスを自由に選択出来るようにすることができる。

参考サイト:
http://www.yiiframework.com/doc/blog/1.1/ja/prototype.database

Comments are closed.