Zend_Db_Tableを使用する

職場では、私自身のORM'ka制作に直面しなければなりませんでした。 彼は自分でやるようになりました(まあ、愚か者ではないでしょうか?)。3日後、型を制御せずにオブジェクトのテーブルの構造を表示する簡単なORMを手に入れました。 結果は次のようになります。









おおよその使用:

  <code class = "php"> $ table = new ArticleTable();
 $ record = $ table-> fetchOneWhere( "slug = 'hello'");  //既存のエントリを取得します
 $ record-> name = 'Fucking Article!';
 $ record-> save();  //これが新しいレコードかどうかに応じて、挿入/更新を呼び出します
 $ record = $ table-> create();  //新しいレコードを作成します
 $ record-> name = 'Fucking Article2!';
 $ record-> slug = 'fucking_article';
 // ...
 $ record-> save(); </ code> 


そして、Zend_Db:Zend_Db_Table / Zend_Db_Table_Rowのようなものが非常に思い出されました。 考え直すことなく、システムnafigを投げてZend Frameworkの一部をプロジェクトにアップロードし(必要に応じて、Zend_Dbコンポーネント全体が正しく機能するために必要なファイルを教えます)、このZend_Dbの内容を読むことも決定しましたが、 、判明したとおり-非常に多く:



実際、自動的に機能するように追加できるものがまだあります。



すべてが好きです。 全体的な印象は素晴らしいシステムです。 使用は簡単で快適です。 :)



例:

レイヤーの私のスーパータイプが最初に移動します( EAAのパターンを読む人は理解します):

  <code class = "php"> class Db_Table extends Zend_Db_Table_Abstract {
   / **
    * @return Zend_Db_Table_Rowset_Abstract
    * /
  パブリック関数fetchAllBy($キー、$値){
     $ where = $ this-> getAdapter()-> quoteInto( "$ key =?"、$ value);
     return $ this-> fetchAll($ where);
   }

   / **
    * @return Zend_Db_Table_Row_Abstract
    * /
  パブリック関数fetchRowBy($キー、$値){
     $ where = $ this-> getAdapter()-> quoteInto( "$ key =?"、$ value);
     return $ this-> fetchRow($ where);
   }

  パブリック関数__call($名前、$引数){
     if(strpos($ name、 'fetchRowBy')=== 0){
       array_unshift($引数、substr($名、10));
       return call_user_func_array(array($ this、 'fetchRowBy')、$ arguments);
     }

     if(strpos($ name、 'fetchAllBy')=== 0){
       array_unshift($引数、substr($名、10));
       return call_user_func_array(array($ this、 'fetchAllBy')、$ arguments);
     }

    新しい例外をスロー(「未定義のメソッド$名前」);
   }
 }

クラスDb_RecordはZend_Db_Table_Row_Abstractを拡張します{
 } </ code> 


そして今、使用例:

  <code class = "php"> class Item extends Db_Table {
   protected $ _name = 'items';
   protected $ _rowClass = 'ItemRecord';
   protected $ _referenceMap = array(
       'Group' =>配列(
         'columns' => 'groupid'、
         'refTableClass' => 'グループ'、
         'refColumns' => 'groupid'、
       )
     );
 }

クラスItemRecord extends Db_Record {
 }

クラスGroupはDb_Tableを拡張します{
  保護された$ _name = 'groups';
   protected $ _rowClass = 'GroupRecord';
   protected $ _dependentTables = array( 'Item');
 }

クラスGroupRecordはDb_Recordを拡張します{
 }

 $ itemTable = new Item();
 $ item = $ itemTable-> fetchRowBySlug( 'hello');
 $ group = $ item-> findParentGroup(); </ code> 


妥協者-すべてがシンプルで便利ですよね?



興味のある方は、Zend FrameworkのドキュメントからZend_Dbに関する章全体を読むことを強くお勧めします。 また、 Zend_Db_Tableに関する私の投稿は 、その改善に専念しています(現在どの程度関連性があるかはわかりませんが、確認する時間はありません:()。



ブログからのクロス投稿



All Articles