ここでは、モデルとデータベースの使い方を勉強してみます。
kohanaのモデルはとてもシンプルで、基底クラスではデータベースの接続のみを受け持っています。
abstract class Kohana_Model { public static function factory($name, $db = NULL) { // Add the model prefix $class = 'Model_'.$name; return new $class($db); } // Database instance protected $_db = 'default'; public function __construct($db = NULL) { if ($db !== NULL) { // Set the database instance name $this->_db = $db; } if (is_string($this->_db)) { // Load the database $this->_db = Database::instance($this->_db); } } } // End Model
モデルのインスタンスが生成されると、データベース接続のインスタンスを取得しに行くといった 感じでしょうか。
kohanaでデータベースに接続するには、application/bootstrap.phpの使用するモジュールへ データベースを追加します。
Kohana::modules(array( // 'auth' => MODPATH.'auth', // Basic authentication // 'codebench' => MODPATH.'codebench', // Benchmarking tool 'database' => MODPATH.'database', // Database access // 'image' => MODPATH.'image', // Image manipulation // 'orm' => MODPATH.'orm', // Object Relationship Mapping // 'pagination' => MODPATH.'pagination', // Paging of results // 'userguide' => MODPATH.'userguide', // User guide and API documentation ));
インストール直後の状態では、コメントアウトされているので上記の部分を修正します。
次にデータベースへの接続設定を定義します。modules/database/config/database.phpをapplication/config/へコピーして データベース接続できるよう修正します。
return array ( 'default' => array ( 'type' => 'mysql', 'connection' => array( 'hostname' => 'localhost', 'username' => 'ユーザー名', 'password' => 'パスワード', 'persistent' => FALSE, 'database' => '接続先データベース', ), 'table_prefix' => '', 'charset' => 'utf8', 'caching' => FALSE, 'profiling' => TRUE, ), ・・・
ここでは、例としてタスクを登録するtasksテーブルを作成してモデルを通してデータを取得してみます。 接続設定で指定したデータベースに次のテーブルを作成します。
CREATE TABLE `tasks` ( `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT, `task` VARCHAR(128) DEFAULT NULL, `limit` DATETIME, `status` INT, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `tasks` (`task`,`limit`,`status`) VALUES ('kohanaのORM','2010/05/21 17:00:00',0); INSERT INTO `tasks` (`task`,`limit`,`status`) VALUES ('kohanaの調査報告','2010/05/28 15:10:00',0);
application/classesフォルダにmodelフォルダを作成し、タスクのモデルクラスを作成します。 Modelを継承してModel_Taskクラスを次のように作成します。
<?php defined('SYSPATH') or die('No direct script access.'); class Model_Task extends Kohana_Model{ public function __construct() { parent::__construct(); } public function getTopTenTasks() { return DB::select()->from('tasks')->limit(10)->execute()->as_array(); } }
tasksテーブルから10件取得するメソッドを作成しデータベースからデータを取得します。
他にも下記のようにSQL文を作成してリクエストすることもできるようです。
public function getTopTenTasks() { $sql = 'SELECT * '."\n". 'FROM `tasks`'."\n". 'LIMIT 0, 10'; return $this->_db->query(Database::SELECT, $sql, FALSE)->as_array(); }
コントローラーでModel_Taskのインスタンスを作成し、タスクデータを取得後ビューで表示します。
<?php defined('SYSPATH') or die('No direct script access.'); class Controller_Task extends Controller_Template_Default { public function action_index() { $tasks = new Model_Task(); $dat['tasks'] = $tasks->getTopTenTasks(); $this->template->content = View::factory('blocks/task', $dat); } }
コントローラー側では、モデルのインスタンスを作成し、データを取得します。
[サンプルファイル]
Copyright 1997-2010 BBB All rights reserved.