モデル クラス

  1. モデルクラスとは
  2. モデルクラスの名前と呼出
  3. モデルクラスの作成
  4. データベース設定
  5. メソッドリファレンス
  6. 使い方例

モデルクラスとは

データベースを操作するモデル処理を行ないます。
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()

モデルクラスのクラステーブル名を取得します。
動的にクラステーブルを決定する順序は

  1. メンバ変数 $table から取得
  2. 継承元クラス名から取得

となります。

戻り値

型 : 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);
    }

}