モデル クラス
モデルクラスとは
データベースを操作するモデル処理を行ないます。
Ziu のモデルは内部処理にライブラリのデータベースを利用しています。
用意したモデルクラスからDAOインスタンスを利用するには、ヘルパー関数「モデルローダー」を利用します。
配置方法は、モデルローダーを参照。
モデルクラスの名前と呼出
基本的にはモデルクラス名とデータベースのテーブル名は、連動するように定義します。
プレフィックス Model_
を付加し頭文字は大文字とします。テーブル名に _
が含まれる場合は単語ごとに頭文字にします。
テーブル名が
member_items
の場合、ファイル配置は(対象フォルダ)/member_items.php
で
クラス名をModel_Member_Items
と定義
コールは、$dao = model('member_items');
で利用
モデルクラスの作成
Ziu では、モデルクラスの初期化インターフェースとしてモデルスーパークラスが用意されています。
モデルスーパークラスを継承することで、簡単にDAOインスタンスを作成することが出来ます。
class Model_Member_Items extends Model_Super
{
// テーブルのクラス指定 : このクラスの基本テーブルを指定することができる
private $table = 'member_items';
public function __construct()
{
parent::__construct();
}
public function getRow($id)
{
// テーブルのSQL指定 : SQLごとにテーブルを指定することができる
$sn = $this->select()->from('member_items')
->where(array('member_item_id', $id))
; // end of $sn
return $this->fetch($sn)->row();
}
}
上記のコンストラクタ定義は、特に必要がなければ未定義にしてください。
もし、必要な場合はモデルスーパークラスのコンストラクタをコールする必要があります。
テーブル名には、クラス指定 と SQL指定 の両方で利用することができます。
クラス指定 の場合は、各SQLのテーブル名を省略し引数なしで利用することができます。$this->select()->from()
データベース設定
モデルクラスに関する設定は、データベース設定で行ないます。
詳しくは、データベース設定を参照して下さい。
メソッドリファレンス
モデルスーパークラスを継承することで利用できるメソッドリファレンスです。
ライブラリ「データーベース」のメソッドの詳細については、データーベースのメソッドリファレンスを参照して下さい。
ライブラリ「データーベース」利用のメソッド
ビルダー | 実行 | 取得 | トランザクション | 情報 |
---|---|---|---|---|
select() | fetch() | all() | begin() | last_insert_id() |
insert() | execute() | row() | commit() | real_query() |
update() | query() | one() | rollback() | last_query() |
delete() | transaction() | affected() | ||
quote() | autocommit() |
モデルスーパークラスのメソッド
- before_action() : 実行系の前処理を定義します
- after_action() : 実行系の後処理を定義します
- get_error() : エラー情報を取得します
- logger() : エラーをログファイルに出力します
- transact() : トランザクションにSQL実行をインジェクトします
- master() : マスターDBへSQL実行をインジェクトします
- table() : クラステーブル名を取得します
- getList() : クラステーブルからデータを取得します
before_action()
メソッド before_action()
を定義することで、 実行系「データベース」のメソッド fetch(), execute(), query()
が処理される前に before_action()
が自動的にコールされます。
戻り値
型 : void
引数値
なし
after_action()
メソッド before_action()
を定義することで、 実行系「データベース」のメソッド fetch(), execute(), query()
が処理された後に after_action()
が自動的にコールされます。
戻り値
型 : void
引数値
なし
get_error()
モデルスーパークラスで発生した直前のエラー情報を取得します。
戻り値
型 : string
引数値
なし
logger($message, $back = 1)
Ziu ログファイルにエラーを出力します
戻り値
型 : void
引数値
項目 | 型 | 内容 |
---|---|---|
$message | string | エラーメッセージ |
$back | integer | debug_backtrace() によるコール巻戻し番号 |
transact($func)
引数に渡した関数処理(無名関数)に対して、トランザクション処理でラップします。
インジェクトされた処理はトランザクション内で実行します。
戻り値
型 : void
引数値
項目 | 型 | 内容 |
---|---|---|
$func | object | 無名関数 |
master($func)
引数に渡した関数処理(無名関数)に対して、マスターDBオブジェクト処理でラップします。
インジェクトされた処理はマスターDBオブジェクトで実行します。
戻り値
型 : void
引数値
項目 | 型 | 内容 |
---|---|---|
$func | object | 無名関数 |
table()
モデルクラスのクラステーブル名を取得します。
動的にクラステーブルを決定する順序は
- メンバ変数
$table
から取得 - 継承元クラス名から取得
となります。
戻り値
型 : string
引数値
なし
getList($limit = NULL, $offset = NULL, array $keys = array(), $order = '')
モデルクラスのクラステーブルからデータを取得します。
このメソッドは、汎用的なデータ取得メソッドとして用いられ、クラステーブル名は内部で table()
をコールしています。
戻り値
型 : array
引数値
項目 | 型 | 内容 |
---|---|---|
$limit | integer | リミット |
$offset | integer | オフセット |
$keys | array | 条件リスト |
$order | string | 並び順 (member_id desc など) |
$keys
には、ライブラリ「データベース」の条件メソッド where()
に渡す配列をリストにして渡します。
例) $keys = array(array('age', '>=', 20), array('gender', 1));
使い方例
モデルクラスの実装例です。
class Model_Member_Items extends Model_Super
{
public function getAll($limit = NULL, $offset = NULL, array $keys = array())
{
$sn = $this->select('SQL_CALC_FOUND_ROWS *')->from('member_items');
if (! empty($keys['item_name'])) {
$sn = $sn->where(array('item_name', 'like', $keys['item_name'] . '%'));
}
$sn = $sn->order('member_item_id desc');
if (! is_null($limit) && ! is_null($offset)) {
$sn = $sn->limit($limit)->offset($offset);
}
return $this->fetch($sn)->all();
}
public function getRow($id)
{
$sn = $this->select()->from('member_items')
->where(array('member_item_id', $id))
; // end of $sn
return $this->fetch($sn)->row();
}
public function insert(array $data)
{
$data['inserted_at'] = date('Y-m-d H:i:s');
$sn = parent::insert('member_items')->values($data);
return $this->execute($sn);
}
public function update(array $data, $id)
{
$data['updated_at'] = date('Y-m-d H:i:s');
$sn = parent::update('member_items')->set($data)->where(array('member_item_id', $id));
return $this->execute($sn);
}
public function delete($id)
{
$sn = parent::delete('member_items')->where(array('member_item_id', $id));
return $this->execute($sn);
}
}