taiyoh's memorandum

@ttaiyoh が、技術ネタで気づいたことを書き溜めておきます。

SQL_SketchなるPHPのライブラリ書いてます

 → taiyoh/sql-sketch-php - GitHub
 これは何かというと、PHPでもSQL::Maker的なモジュールが欲しかったので、書いてみました、ということです。510行くらいしかなくて、あんまりコーナーケースに対応したSQLは書けないです。でも、よくあるSQL文の7割くらいはカバーできるんじゃないか、と思ってます。あと、MySQL専用だったりします><
 使い方は二種類あって、一つはPropelモードで、もう一つがlithiumモードです(単なる呼称)。以下を見てみると、その名前のわけが分かるかも。

// SELECT foo FROM hoge WHERE hoge.type = 'bar' ORDER BY hoge.id DESC LIMIT 3;
// というSQLを出力したいとします。


// Propelモード
$sk = new SQL_Sketch('hoge');
$sk->add('hoge.type', 'bar');
$sk->addDescendingOrderByColumn('hoge.id');
$sk->setLimit(3);
list($sql, $bind) = $sk->select();


// lithiumモード
$sk = new SQL_Sketch('hoge');
list($sql, $bind) = $sk->select(array(
    'conditions' => array(
         'type' => array('=' => 'bar')
    ),
    'order' => array('id' => 'DESC'),
    'limit' => 3
));

 あくまでベースはPropelモードで、lithiumモードはsyntax sugarみたいなものです。
 元々は、symfony上でアプリケーションを書いている時、生のSQL文を作成するのに文字列連結するのがとにかく見づらかったので、Propelの同じような記法で作れるようにしたい、と思ったのが発端です。PHPフレームワークフルスタックなものが多すぎて、こういうミドル的なポジションのモジュールが全然育ってないですね。だからフレームワーク毎の学習コストがどんどん上がっていくんだと思うけど。。。