データベース ライブラリ

Ziu 付属のデータベースライブラリです。内部ではPHPのPDOライブラリを用いて、データベース操作を行う機能を提供します。
このデータベースライブラリは、SQLナビゲータ と称するチェーンメソッド形式に関数をつなぎ合わせてSQLライクにデータを操作することができます。

  1. 設定
  2. 使い方
  3. メソッドリファレンス

設定

データベースライブラリを利用するための設定を行ないます。
設定からデータ取得までの簡単な流れを示します。

単体で利用の設定方法

本データベースライブラリは、単体で使用することができます。

$config  = array(
    'dsn' => 'mysql:host=localhost;dbname=sample_pro',
    'user' => 'sample_user',
    'pass' => '123456',
    'pooling' => FALSE,
);
$db = new Database($config);
$list = $db->fetch($db->select()->from('sample_table'))->all();
Ziu で利用の設定方法

Ziu での利用では、モデルスーパークラスを用いでインスタンスが作成されます。
設定の記述はデータベース設定で行ない、本ライブラリをモデルクラスで使用します。

データベース設定
_conf/db.php接続名 に合わせ接続情報を指定します。以下は接続名が production の場合。

'connection' => array(
    'production' => array(
        'dsn' => 'mysql:host=localhost;dbname=sample_pro',
        'user' => 'sample_user',
        'pass' => '123456',
        'pooling' => FALSE,
    ),
),

モデルクラス
テーブルに合わせたモデルクラス _model/sample_table.php を用意します。

public function getAll()
{
    return $this->fetch($this->select()->from('sample_table'))->all();
}

ロジッククラス
作成したモデルオブジェクトから getAll() メソッドを利用してデータを取得します。

$list = model('sample_table')->getAll();

設定項目

項目 初期値 説明
dsn string なし PDOで利用できるDSNを指定します
user string なし データベースの接続ユーザー名を指定します
pass string なし データベースの接続パスワードを指定します
charset string utf8 データベースの接続文字エンコードを指定します
pooling boolean FALSE PDOプーリング機能の利用可否を指定します
autocommit boolean TRUE PDO自動コミット機能の利用可否を指定します
reporting string exception PDOエラーリポートモード (silent,warning,exception) を指定します

使い方

Ziu のモデルクラスでデータベースライブラリの利用方法として、いくつかのサンプルを示します。

レコードを取得

シンプルなデータ取得
SQLナビゲータ により、チェーンメソッドを用いてSQLのような形で記述することができます。

$sn = $this->select()->from('member')->where(array('member_id', $id)); // end of $sn
$data = $this->fetch($sn)->row();

SQL式の指定
SQL式を指定して、演算したした結果をWHERE句に指定することができます。

->where(array('age > age + 1'))

サブクエリを利用
WHERE句、FROM句、JOIN句にサブクエリとして SQLナビゲータ を記述することができます。
WHERE句の場合、条件の値指定に SQLナビゲータ をネストします。

->where(
    array('id', 'in', $this->select('member_id')->from('team')->where(array('team_id', 2)))
)

FROM句、JOIN句では、テーブル指定に配列 array(<SQLナビゲータ>, 'エイリアス名') を用いて指定します。

->from(array($this->select()->from('member')->where(array('gender_id', 1)), 'm'))

レコードを登録

シンプルなインサート
テーブルのカラムに合わせた連想配列を指定することで、レコードを登録することができます。

$data = array(
    'name'        => '佐藤 一郎',
    'age'         => '20',
    'birthday'    => '1992-01-19',
    'gender_id'   => 1,
    'inserted_at' => date('Y-m-d H:i:s'),
);
$sn = parent::insert('member')->values($data);
$ret = $this->execute($sn);

複数レコードをインサート
values() メソッドを繰り返し指定して複数レコードのインサートができます。(MySQLのみ)

$sn = parent::insert('member')->values($data1)
                              ->values($data2)
                                ; // end of $sn
$ret = $this->execute($sn);

2次元配列での指定も可能です。

$sn = parent::insert('member')->values(array($data1, $data2));
$ret = $this->execute($sn);

SQL式の指定
SQL式を指定して、演算したした結果をインサートすることができます。(アップデートでも同様に利用可)

$data['code_num'] = array('code_num + 1'); // or array('code_num', '+' ,'1');

セレクトインサート
セレクト文を用いてインサートすることで、取得したレコードを登録することができます。

$sn = parent::insert('sample_user')->select(
    $this->select('id', 'name')->from('member')->where(array('class_id', 1))
); // end of $sn

レコードを更新

アップデート
テーブルのカラムに合わせた連想配列を指定することで、WHERE句に任意の条件を用いてレコードを更新することができます。

$data = array(
    'name'      => '佐藤 一郎',
    'age'       => '20',
    'birthday'  => '1992-01-19',
    'gender_id' => 1,
    'inserted_at' => date('Y-m-d H:i:s'),
    'updated_at'  => date('Y-m-d H:i:s'),
);
$sn = parent::update('member')->set($data)->where(array('id', 3));
$this->execute($sn);

レコードを削除

デリート
WHERE句などに任意の条件を用いて、レコードを削除することができます。

$sn = parent::delete('member')->where(array('id', '>', 7));
$this->execute($sn);

直接SQLを実行

取得系
query() メソッドを実行した後、all()row()one() メソッドでレコードを取得します。

$this->query('select * from member')->all();

更新系
query() メソッドを実行するのみです。

$this->query('update member set age = 30 where id = 2');

メソッドリファレンス

データベースライブラリのメソッドリファレンスです。

  1. 共通メソッド
  2. トランザクション系メソッド
  3. SELECT系メソッド
  4. WHERE系メソッド
  5. INSERT系メソッド
  6. UPDATE系メソッド
  7. DELETE系メソッド

共通メソッド

config($config = NULL)

データベースライブラリの初期設定をします。

戻り値

型 : mixed
$config に指定する内容で戻り値が変わります。

引数値
項目 内容
$config mixed 設定を配列で指定

$config に設定名を文字列で指定した場合は現在の設定値を取得できます。未指定の場合は全ての設定値を配列で取得します。
$config に指定する設定項目については、設定を参照して下さい。

connect()

conifg()による設定に応じたデータベース接続を実行します。
データベース接続オブジェクトはクラス内部で保持され、SQLナビゲータ オブジェクトで使用されます。

戻り値

型 : object Database
データベース接続オブジェクト

引数値

なし

fetch(Database_Query $builder)

取得系の SQLナビゲータ オブジェクトを実行します。

戻り値

型 : object Database

引数値
項目 内容
$builder object 取得系の SQLナビゲータ オブジェクト

例) $this->fetch($this->select()->from('member'))->all();

execute(Database_Query $builder)

主に更新系の SQLナビゲータ オブジェクトを実行します。

戻り値

型 : boolean

引数値
項目 内容
$builder object SQLナビゲータ オブジェクト

例) $this->execute(parent::insert(array('name' => 'sample')));

query($query)

直接SQLを実行します。
MySQLの setshow コマンドなども実行することができます。

戻り値

型 : object Database

引数値
項目 内容
$query string SQLクエリ

例) $this->query('select * from member where age = 20')->all();

all($object = FALSE)

複数のレコードを配列で取得します。データが存在しない場合は空の配列を返します。

戻り値

型 : array
$object の指定がある場合、そのオブジェクトにバインドされます。

引数値
項目 内容
$object mixed クラス名、又はオブジェクト

例) $this->fetch($this->select()->from('member'))->all('Member');

row($object = FALSE)

1件のレコードを配列で取得します。データが存在しない場合は空の配列を返します。

戻り値

型 : mixed
デフォルトは配列で返します。$object の指定がある場合、バインドされたオブジェクトを返します。

引数値
項目 内容
$object mixed クラス名、又はオブジェクト

例) $this->fetch($this->select()->from('member')->where('id' => $id))->row('Member');

one($num = 0)

1つのデータを取得します。データが存在しない場合は空文字を返します。

戻り値

型 : string

引数値
項目 内容
$num integer カラム番号

例) $this->fetch($this->select('count(id)')->from('member'))->one();

quote($val)

SQL向けにクオートした値を取得します。

戻り値

型 : string

引数値
項目 内容
$val string SQLの値

例) $sql = ' where id = ' . $this->quote($id);

last_query()

最後に実行されたSQLを取得します。

戻り値

型 : string

引数値

なし

例) $this->last_query();

real_query(Database_Query $builder)

SQLナビゲータ により生成されたSQLを取得します。

戻り値

型 : string

引数値
項目 内容
$builder object SQLナビゲータ オブジェクト

例) $this->real_query($this->select()->from('member'));

last_insert_id($name = NULL)

最後にインサートしたID(シーケンスID)を取得します。(MySQLのみ)

戻り値

型 : integer

引数値
項目 内容
$name string シーケンスカラム名

$name が未指定の場合は自動的にシーケンスIDの取得を試みます。

例) $this->last_insert_id();

affected()

SQLにより影響した行数を取得します。取得系の場合は取得件数を返します。

戻り値

型 : integer

引数値

なし

例) $this->affected();

▲リファレンスTOP

トランザクション系メソッド

begin()

データベース接続オブジェクトに対してトランザクションを開始します。

戻り値

型 : boolean
成功した場合に TRUE を、失敗した場合に FALSE を返します。

引数値

なし

例) $this->begin();

commit()

トランザクション中のデータベース操作をコミットします。

戻り値

型 : boolean
成功した場合に TRUE を、失敗した場合に FALSE を返します。

引数値

なし

例) $this->commit();

rollback()

トランザクション中のデータベース操作をロールバックします。

戻り値

型 : boolean
成功した場合に TRUE を、失敗した場合に FALSE を返します。

引数値

なし

例) $this->rollback();

transaction()

トランザクションが開始されているか判断します。

戻り値

型 : boolean
トランザクションが現在アクティブな場合に TRUE、 そうでないときに FALSE を返します。

引数値

なし

例) $this->transaction() && $this->rollback();

autocommit($bool = TRUE)

単一SQL文での自動コミットを設定します。

戻り値

型 : boolean
成功した場合に TRUE を、失敗した場合に FALSE を返します。

引数値
項目 内容
$bool boolean TRUE、又は FALSE

例) $this->autocommit(FALSE);

自動コミットの設定はconfig()設定でも指定できます。
初期値は TRUE 自動コミットON となっています。

▲リファレンスTOP

SELECT系メソッド

select([$col, array($col, 'alias'), ...])

SELECT としての SQLナビゲータ オブジェクトを作成します。

戻り値

型 : object Database_Select

引数値
項目 内容
$col mixed カラム名

$col はカンマ区切りで複数指定できます。
配列 array($col, 'エイリアス名') での指定も可能です。未指定 select() の場合はアスタリスク select('*') として扱われます

例) $this->select(array('name', 'member_na'))->from('member');

from($table[, array($table, 'alias')...])

FROM句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$table mixed テーブル名

$table はカンマ区切りで複数指定できます。
配列 array($table, 'エイリアス名') での指定も可能です。複数のテーブル名を指定しクロスジョインができます。

例) $this->select()->from(array('member', 'm'), array('guest', 'g'))->where(array('m.guest_id = g.guest_id'));

join($table, $type = 'left')

JOIN句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$table mixed テーブル名
$type string JOINタイプ

$table は、配列 array($table, 'エイリアス名') での指定も可能です。
SQLナビゲータ のサブクエリを array(<SQLナビゲータ>, 'エイリアス名') で指定することも可能です。
$type には、leftrightinner 等を指定します。未指定時は left として扱われます。

例) $this->select()->from('member')->join('gender')->using('gender_id');

on($condition[, $condition...])

ON句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$condition mixed JOIN条件

$conditionwhere() と同じ指定方法となります。

例) ->join('gender g')->on(array('g.gender_id = m.gender_id'), array('age >= 20'))

using($col[, $col...])

USING句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$col string カラム名

カンマ区切りで複数指定可能です。

例) ->join('gender')->using('gender_id')

group($col[, $col...])

GROUP BY句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$col string カラム名

カンマ区切りで複数指定可能です。

例) ->group('age')

having($condition[, $condition...])

HAVING句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$condition mixed HAVING条件

$conditionwhere() と同じ指定方法となります。

例) ->group('age')->having(array('gender_id', 1))

order($col[, array($col, 'direction')...])

ORDER BY句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$col mixed カラム名

$col は、配列 array($col, 'direction') で順序を指定することができます。

例) ->order(array('id', 'desc')) 又は ->order('id desc')

limit($num)

LIMIT句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$num integer リミット

例) ->limit(10)->offset(0)

offset($num)

OFFSET句を指定します。

戻り値

型 : object Database_Select

引数値
項目 内容
$num integer オフセット

例) ->limit(10)->offset(0)

union($query)

UNION句を指定し、SELECT文を結合します。

戻り値

型 : object Database_Select

引数値
項目 内容
$query mixed Database_Select オブジェクト 又は all を指定

例) ->union('all', $this->select()->from('member'))

▲リファレンスTOP

WHERE系メソッド

where($condition[, $condition...])

WHERE句を指定します。

戻り値

型 : object Database_Where

引数値
項目 内容
$condition mixed WHERE条件
条件の指定方法

条件指定は配列で行います。
論理演算子の andor や丸括弧(パーレン) () は文字列/配列どちらでも指定可能です。

条件配列の指定種類には、1項指定/2項指定/3項指定があります。

項目 SQL 説明
1項指定 array('age > age + 1') age > age + 1 SQL式を直接記述します
2項指定 array('age', 20) age = 20 イコール比較となります
3項指定 array('age', '!=', 30) age != 30 任意の比較演算子を記述します

比較条件

m.id = 4
array('m.id', 4) 又は array('m.id', '=', 4)

m.id >= 4
array('m.id', '>=', 4)

BETWEEN条件

m.birth between '2011-10-05' and '2012-10-15'
array('m.birth', 'between', array('2011-10-05', '2012-10-15'))

IN条件

m.id not in (4, 5, 6)
array('m.id', 'not in', array(4, 5, 6)) 又は array('m.id', 'not in', '(4, 5, 6)')

直接SQL条件

substring(name, -2) = 11
array('substring(name, -2) = 11')

AND条件

m.age > 10 and m.age < 20
->where(array('m.age', '>', 10), array('and'), array('m.age', '<', 20))
->where(array('m.age', '>', 10), 'and', array('m.age', '<', 20))
->where(array('m.age', '>', 10))->and_(array('m.age', '<', 20))

OR条件

m.age = 20 or m.age = 30
->where(array('m.age', 20), array('or'), array('m.age', 30))
->where(array('m.age', 20), 'or', array('m.age', 30))
->where(array('m.age', 20))->or_(array('m.age', 30))

サブクエリ条件

m.id not in (select * from member where age < 20)
array('m.id', 'not in', $this->select()->from('member')->where(array('age', '<', 20)))

and_($condition[, $condition...])

AND句を指定します。

戻り値

型 : object Database_Where

引数値
項目 内容
$condition mixed AND条件

$conditionwhere() と同じ指定方法となります。

例) ->and_(array('age', '>', 20))

or_($condition[, $condition...])

OR句を指定します。

戻り値

型 : object Database_Where

引数値
項目 内容
$condition mixed OR条件

$conditionwhere() と同じ指定方法となります。

例) ->or_(array('age', '>', 20))

paren($condition[, $condition...])

丸括弧(パーレン)を指定します。

戻り値

型 : object Database_Where

引数値
項目 内容
$condition mixed WHERE条件

第1引数に and 又は or を指定する事で、丸括弧(パーレン)指定を連結する論理演算子となります。
$conditionwhere() と同じ指定方法となります。

例) ->paren('or', array('age', '>', 20)) // or (age > 20)

▲リファレンスTOP

INSERT系メソッド

insert($table, $cols = NULL)

INSERT としての SQLナビゲータ オブジェクトを作成します。

戻り値

型 : object Database_Insert

引数値
項目 内容
$table string テーブル名
$cols array カラム名

$cols を省略した場合、values() メソッドの連想配列のキーが使用されます。

例) parent::insert('member')->values(array('name' => 'Shue'));

values(array $vals)

VALUES句を指定します。

戻り値

型 : object Database_Insert

引数値
項目 内容
$vals array データ

本メソッドを複数回コールしたり、2次元配列で複数レコードを指定することでバルクインサートをすることができます。

例) parent::insert('member')->values(array(array('name' => 'Tom'), array('name' => 'Joe')))

select(Database_Select $query)

INTO SELECT句を指定します。

戻り値

型 : object Database_Insert

引数値
項目 内容
$vals array SQLナビゲータ オブジェクト

例) parent::insert('member')->select($this->select('name')->from('guest'));

▲リファレンスTOP

UPDATE系メソッド

update($table)

UPDATE としての SQLナビゲータ オブジェクトを作成します。

戻り値

型 : object Database_Update

引数値
項目 内容
$table string テーブル名

例) parent::update('member')->set(array('name', 'Bylon'))->where(array('id', 2));

set(array $sets)

SET句を指定します。

戻り値

型 : object Database_Update

引数値
項目 内容
$sets array データ

例) parent::update('member')->set(array('name', 'Bylon'))->where(array('id', 2));

join(), on(), using()

JOIN、ON、USING句を指定します。

戻り値

型 : object Database_Update

引数値

これらはSELECT系メソッド join()on()using() と同じ指定方法となります。

where(), and_(), or_(), paren()

WHERE、AND、OR、丸括弧(パーレン)を指定します。

戻り値

型 : object Database_Update

引数値

これらはWHERE系メソッド where()and_()or_()paren() と同じ指定方法となります。

▲リファレンスTOP

DELETE系メソッド

delete($table)

DELETE としての SQLナビゲータ オブジェクトを作成します。

戻り値

型 : object Database_Delete

引数値
項目 内容
$table string テーブル名

例) parent::delete('member')->where(array('id', 10));

where(), and_(), or_(), paren()

WHERE、AND、OR、丸括弧(パーレン)を指定します。

戻り値

型 : object Database_Delete

引数値

これらはWHERE系メソッド where()and_()or_()paren() と同じ指定方法となります。

▲リファレンスTOP