2012-09-19 68 views
8

我有一個小原子模型hydrate()方法的問題。我用這個方法來從給定陣列滋潤conrete模型的對象,像這樣:保溼withou嵌套子模型簡單對象時學說1.2水合物的方法 - 數組模型的對象

$model = new Doctrine\Model\Model; 
$model->hydrate($model_array); 

一切都運行完美。現在問題是我需要(使用這種方法)水合對象具有嵌套的對象(其中一些也有嵌套的對象)。

如果我使用的是HYDRATE_RECORD那會很好,但是所有來自查詢的記錄都會返回爲意味着更多內存消耗的對象。因此,我正在使用HYDRATE_ARRAY並根據需要將水泥陣列附着到物體上。我們假設我有一個模型A,它具有嵌套模型AB,AC(由一對多),AD和AC具有另一個嵌套模型ACE。 A陣列的print_r後,我們可以看到這樣的結構:

A Array (
    ... 
    ab Array (...) 
    ac Array (
     AC Array (
      ... 
      ace Array (...) 
     ) 
     AC Array (
      ... 
      ace Array (...) 
     ) 
     ... 
    ) 
    ad Array (...) 
) 

使用水合物之後,通常我會認爲這將是我的目標:

A Object { 
    ... 
    ab Object { ... } 
    ac Array (
     AC Object { 
      ... 
      ace Object { ... } 
     } 
     AC Object { 
      ... 
      ace Object { ... } 
     } 
     ... 
    ) 
    ad Object { ... } 
} 

不採用這個我得到這樣的結構:

A Object { 
    ... 
    ab Array (...) 
    ac Array (
     AC Array (
      ... 
      ace Array (...) 
     ) 
     AC Array (
      ... 
      ace Array (...) 
     ) 
     ... 
    ) 
    ad Array (...) 
} 

所以只有主模型轉換爲對象。 您是否知道如何讓所有嵌套的模型數組轉換爲對象,如所預期的結果?

不,我不能在查詢數據庫時使用HYDRATE_RECORD

+0

@ j0k爲什麼我不應該感謝回答? – shadyyx

+3

網站政策,沒有簽字,謝謝,在實際問題中的那種事情 - 因爲它不是問題的一部分。評論很好。 – Orbling

+2

請參閱[此主題](http://meta.stackexchange.com/q/2950/182741)。 – j0k

回答

1

如果偶然發現this,可查看文檔。您是否嘗試過fromArray而不是hydrate

+0

我沒有試過'fromArray()'。然而,我現在不在這個項目的幾個月工作,我不得不使用延遲加載,我試圖避免...如果我再次對該項目做一些修改,我會試試看。現在接受你的答案,因爲它看起來很有希望! – shadyyx

0

試圖回答這個問題,盡我所能的知識,這並不是很多,因爲我從來沒有直接處理水合作用。

使用數組作爲水合方法的問題是,您基本上失去了附加到原始查詢的所有元數據,最重要的是表名。

解決方案可能是編寫自己的水合方法,將數組轉換回對象。