第4章 giiによるModelの追加

Modelの設計

前回までの成果物はこちらに置いています。この章から読み進める人はそれをxamppのhtdocs以下の直接、置いてください。

この章ではModelを追加していきます。Modelは前にも説明したようにデータベースに関わる部分です。本ブログでは会員交流サイトのようなものを作っていきます。たとえば会員のデータベースの構造(名前・メールアドレス・年齢・・・etc)の定義などもModelを使って行います。

またデータベースをあまり使ったこともない人も多いと思いますので、ここでは習うより慣れろという感じで解説を進めていきます。

とりあえず本章では、これから作るサイトの会員のデータを扱うテーブル(データベース)を定義していきます。会員のデータとしては以下の要素があるものとします。

    • id: 会員の通し番号
    • e-mail: 会員のE-mailアドレス
    • name: 会員の名前

上記のidはその会員の会員番号です。e-mailは、その会員のe-mailアドレスです。nameはその会員の名前です。

とりあえず今から上記の属性をもつテーブルを作ります。またテーブル名はuserとします。


 

phpmyadminからテーブルを追加

ではxamppからApacheとMYSQLを起動してください。http://localhost/phpmyadminを開きます。

 

phpmyadminのログイン画面
phpmyadminのログイン画面

これはphpmyadminと呼ばれるデータベースの管理ソフトです。もともとxamppの中に組み込まれているソフトウェアです。上記の画面が見えたらユーザ名にrootを、パスワードに第0章で決めたMySQLのパスワードを入力してください。(本ブログではunko9314と入力しました。)

この次に画面のデータベースを押してください。

chap4-2

すると以下の画面が現れるのでyiiと入力してください。(yiiが本ブログで使用するデータベースの名前です。実は名前はyiiでなくてもいいですが、面倒くさい人はyiiにしといてください。)

chap4-3

その後、画面左にあるyiiを押してください。

chap4-4

その後、userという名前のテーブルを作成しますが、すでに私がつくったものがあるので、それをそのまま使ってください。まずはこちらをダウンロードしてください。(user.sql

具体的には以下のようにインポートを押します。

chap4-5

そして参照を押してください。そこに上記でダウンロードしたuser.sqlを指定して、実行してください。

chap4-6

これが成功するとyiiのデータベースの中にuserというテーブルが作られます。ちなみにサンプルとして一人分の会員データも一緒に記録してあります。あとでこれを表示させるプログラムを作ります。

chap4-7

これでphpmyadminの画面での操作は終了です。


protected\config\main.phpの設定(データベース接続情報)

まずはC:\xampp\htdocs\protected\config\main.phpを開きます。そこでyiiからMySQLに接続するための設定情報を入力します。

46行目あたりに以下のような記述があります。

		'db'=>array(
			'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
		),
		// uncomment the following to use a MySQL database
		/*
		'db'=>array(
			'connectionString' => 'mysql:host=localhost;dbname=testdrive',
			'emulatePrepare' => true,
			'username' => 'root',
			'password' => '',
			'charset' => 'utf8',
		),
		*/

いまはsqliteというものがデータベースに選ばれているので、それをMySQLに変更します。具体的には以下のように変更します。

		//'db'=>array(
		//	'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
		//),
		// uncomment the following to use a MySQL database
		'db'=>array(
			'connectionString' => 'mysql:host=localhost;dbname=yii',// dbname=yiiに変更する
			'emulatePrepare' => true,
			'username' => 'root',
			'password' => 'unko9314', // ここを0章で設定したmysqlのパスワードに変更する
			'charset' => 'utf8',
		),

まず上の3行をコメントアウトしました。そのあと、dbname=yiiに変更するのと、(yiiはデータベースの名前でです。自分で違う名前にした人はその名前を使ってください) さらにpasswordの部分を0章で設定したMySQLのパスワードに変更します。本ブログではunko9314です。


 

giiによるModelの追加

前回の章と同じようにhttp://localhost/giiにアクセスしてください。その後、Model Generatorを開いてください。

そして以下の画面のように入力してください。

chap4-8

  • テーブル名は、上記のphpmyadminの時にuserという名前のテーブルを作ったので、userとします。
  • ModelClassはモデルのクラス名で、ここではUserとします。

そしてPreview→GenerateをすればUserという名前のModelが作成されます。(C:\xampp\htdocs\protected\models)

chap4-9


Modelのデータを表示してみよう

さて上記で作ったデータベースのデータに実際にアクセスしてみましょう。上記でも述べましたが先ほどデータベースにインポートしたuser.sqlには会員一人分のデータが保存されていました(以下の図を参照)。これを表示するプログラムを作ってみましょう。なおここで保存されているデータを会員番号1のユーザと呼びます。なぜならば、id(会員番号)が1だからです。

一人分のデータが記録されている
一人分のデータが記録されている

ここでの目標としてはhttp://localhost/user/testにアクセスしたときに会員番号1のユーザのメールアドレスを表示させます。

前の章で作ったc:\htdocs\protected\controllers\UserControler.phpを開いてください。ソースコードを以下のように編集します。

<?php

class UserController extends Controller
{
	public function actionIndex()
	{
		$this->render('index');
	}
	// 会員番号1のユーザを表示
	public function actionTest()
	{
		// データベースにアクセスする
		$user = User::model()->findByPk(1); // userのデータベースで会員番号1のものにアクセスする
		
		// Viewに表示をする
		$this->render('test',array('aaa'=>$user));
	}

具体的な変更点はactionTestの中身です。

$user = User::model()->findByPk(1);

の部分についてはUserという名前のModelのクラス(この章で作ったModelですね)の中から、会員番号1のユーザを取得してくださいという内容の命令です。これを$userという変数に代入します。

findByPkについてですが、PkはPrimary Keyのことです。ここでは会員番号のことだと思ってください。ですので会員番号をもとにした検索命令だと考えてください。最後の(1)の1は会員番号1のことです。ここの1を2にすれば会員番号2のユーザを取得できますが、今はデータベースにそんなユーザは登録されていませんのでnullが返ってきます。

次に以下のソースですが、

$this->render('test',array('aaa'=>$user));

特に、

array('aaa'=>$user)

の部分ですが、C:\xampp\htdocs\protected\views\user\test.phpの中で$aaaという変数の中身にUserControllerで定義した$userを代入してくださいという意味です。

そこでC:\xampp\htdocs\protected\views\user\test.phpを開いてみましょう。以下のように編集してください。

<h1>テストです</h1>
<p><?php echo $aaa->email;?></p>

ここで$aaaはUserControllerの$userの中身が入っています。$aaa->emailで会員番号1のユーザのemailのデータが取得できます。試しにhttp://localhost/user/testにアクセスしてください。

成功していれば以下のような画面が表示されるはずです。

chap4-11

本章では以上のようにデータベース・Modelの作成と、yiiのプログラムからのアクセスの方法を解説しました。


第4章での成果物はこちらに置いておきます。

  • htdocs-chap4.zipはソースコードです。これはhtdocs直下に展開してください。
  • user.sqlはデータベースの情報です。phpmyadminからyiiというデータベースを作ってその下にインポートしてください。