2013-10-17 63 views
0

我需要合併來自多個表的信息。 在使用實體的情況下,我應該爲它們創建所有可能的字段作爲屬性+ setters/getters。 但在保存對象 - 我應該拆分/取消設置不在主表中的所有屬性。帶連接的zf2實體

可能有更多的「真實」的方式來處理它,而無需使用原則等

回答

0

如果我是你,我會仔細看看Hydrators:

ZF2 docs on hydrators

創建一個新的類,它實現了HydratorInterface:

namespace Zend\Stdlib\Hydrator; 

interface HydratorInterface 
{ 
    /** 
    * Extract values from an object 
    * 
    * @param object $object 
    * @return array 
    */ 
    public function extract($object); 

    /** 
    * Hydrate $object with the provided $data. 
    * 
    * @param array $data 
    * @param object $object 
    * @return void 
    */ 
    public function hydrate(array $data, $object); 
} 

你需要實現兩個功能:

extract($object); 

提取將從一個對象中創建一個數組。

hydrate(array $data, $object); 

水合物將從數組中創建一個對象。

當你做一個選擇你可以在1個數組中有所有的字段,所以你沒有問題把它放在對象中。提取時,你希望它分裂。你可以以這樣的方式實現摘錄:

public function extract($object) 
{ 
    return array(
     'tbl1' => array(
      'fld1' => $object->getFld1(), 
      'fld2' => $object->getFld2(), 
      'fld3' => $object->getFld3(), 
     ), 
     'tbl2' => array(
      'fld4' => $object->getFld4(), 
      'fld5' => $object->getFld5(), 
     ), 
     'tbl3' => array(
      'fld6' => $object->getFld6(), 
      'fld7' => $object->getFld7(), 
      'fld8' => $object->getFld8(), 
      'fld9' => $object->getFld9(), 
     ), 
    ); 
} 

當你再提取數據,可以將每個組數據傳遞到正確的表中插入或更新。