私はZend_Db
にかなり取り組みました PHP SQLクエリを作成するためのクラス
を含むライブラリ 。 WHERE
で考えられるすべてのSQL構文を処理しようと試みることにしました。 およびHAVING
いくつかの理由による条項:
-
PHPは、リクエストごとにコードを解析およびコンパイルするスクリプト言語です(バイトコードキャッシュを使用しない場合)。そのため、PHP環境は、かさばるコードライブラリに敏感です。Java、C#、Python、またはあなたが持っているものよりも敏感です。したがって、ライブラリをできるだけスリムに保つことが最優先事項です。
すべての
Zend_Db
私が取り組んだライブラリは、約2,000行のPHPコードでした。対照的に、JavaHibernateは約118K行のコードです。ただし、Javaライブラリはプリコンパイルされており、リクエストごとにロードする必要がないため、これはそれほど問題にはなりません。 -
SQL式は、あなたが示したPHPベースの構造のどれよりもコンパクトで、読みやすく、維持しやすい生成文法に従います。 SQL式の文法を学ぶことは、それをシミュレートできるAPIを学ぶことよりもはるかに簡単です。最終的には「簡略化された文法」をサポートすることになります。または、そのように始めて、ユーザーコミュニティから FeatureCreep に強制されていることに気づきます。 APIが使用できないほど複雑になるまで。
-
このようなAPIを使用するアプリケーションをデバッグするには、必然的に最終的なSQL式にアクセスする必要があるため、最もリークの多い抽象化 あなたが持つことができます。
-
SQL式にPHPベースのインターフェースを使用することの唯一の利点は、スマートエディターとIDEのコード完了を支援することです。しかし、非常に多くの演算子とオペランドが
'>='
のような文字列定数を使用する場合 、コード完了インテリジェンスを台無しにします。
更新: 良いブログ記事「
PerlのDBIx::Classも見るかもしれませんが、結局はかなり醜いものになります。