memememomo/php-SQL-Maker - GitHub
PHPでもSQL::Makerを使いたいなーとか、
PHPUnit使ってみたいなーとか、
PHPの練習にいいかなーとか思ったので作りました。
プラグインなどの一部の機能はまだ実装はできておりませんが、基本的なSQLを生成できるようになっています。
使い方は以下のような感じです。
select()
// テーブル名
$table = 'pokedex';
// フィールド
$fields = array('id', 'name');
// WHERE句
$where = array();
$where['area'] = 'houen';
$where['type'] = array( 'like' => '%electric%' );
// オプション
$opt = array();
$opt['order_by'] = array('id');
// SQL生成
list($sql, $binds) =
$builder->select($table, $fields, $where, $opt);
/*
* $sql => "SELECT id, name
* FROM pokedex
* WHERE (area = ?) AND (type LIKE ?)
* ORDER BY id"
* $binds => ("houen", "%electric%")
*/
WHERE句
// テーブル名
$table = 'pokedex';
// フィールド
$fields = array('*');
// WHERE句
$where = array(
'name' => 'Pikachu',
'legendry' => null,
'area' => array('ish', 'joto'),
'base_hp' => array('<=' => 40),
'type' => array('like' => '%electric%'),
'id' => SQL_Maker::scalar( array('= (? - 0)', 25) ),
'available' => SQL_Maker::scalar( array('LIKE ? ESCAPE ?', '%mega\\_kick%', '\\') )
);
// SQL生成
list($sql, $binds) = $builder->select($table, $fields, $where);
/*
* WHERE ( name = "Pikachu" ) AND
* ( legendry IS NULL ) AND
* ( area IN ("ish", "joto") ) AND
* ( base_hp <= 40 ) AND
* ( type LIKE "%electric%" ) AND
* ( id = (25 - 0) ) AND
* ( available LIKE "%mega\_kick%" ESCAPE "\" );
*/
array()やSQL_Maker::scalar()などを使うと、割と複雑なWHERE句が生成できます。
その他の例は、「SQL/Maker/Condition.php」に書いてあります。
perlのスカラーリファレンスの代わりに、独自のSQL_Maker::scalar()を使っているのが、あまり気に入ってません。どうすれば良いのだろ。
delete()
list($sql, $binds) = $builder->delete('pokedex', array( 'id' => '25' )); /* * $sql => "DELETE FROM pokedex WHERE (id = ?)" * $binds => (25) */
insert()
// テーブル名
$table = 'pokedex';
// VALUES
$values = array(
'id' => 25,
'name' => 'Pikachu'
);
// SQL生成
list($sql, $binds) = $builder->insert($table, $values);
/*
* $sql => "INSERT INTO pokedex (name, id) VALUES (?, ?)"
* $binds => ("Pikachu", 25)
*/
update()
// テーブル名
$table = 'pokedex';
// データ
$set = array('type' => 'electric');
// WHERE句
$where = array('id' => 25);
// SQL生成
list($sql, $binds) = $builder->update($table, $set, $where);
/*
* $sql => "UPDATE pokedex SET type = ? WHERE (id = ?)"
* $binds => ("electric", 25)
*/
メソッドチェーン
$sql = new SQL_Maker_Select(); $sql ->addSelect('foo') ->addSelect('bar') ->addSelect('baz') ->addFrom('table_name') ->asSql(); // => "SELECT foo, bar, baz FROM table_name"
参考
tokuhirom/SQL-Maker - GitHub
元のモジュールです。perlを書いているときに愛用しています。

- 作者: 冨田尚樹,タナカユカリ
- 出版社/メーカー: ワークスコーポレーション
- 発売日: 2011/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 1,962回
- この商品を含むブログ (19件) を見る
プログラム例で参考にさせていただきました。