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件) を見る
プログラム例で参考にさせていただきました。