2014-09-03 33 views
0

對不起,這真的很糟糕的標題。Php對象加載模式

我有一個對象類和一個用於獲取所有對象的objectManager類。 (這是一個例子)。

如果ID參數存在那麼對象做出一個SQL查詢,並填寫數據本身我可以創建new Object($id);

的對象。

我想製作所有對象的表格,顯示它們的值。

我應該使用objectManager類來創建一個大的SQL查詢,它將返回我需要的所有東西,或者正確地獲取一個id列表,然後在循環中單獨加載每個對象?

我認爲只做一個查詢更好,但代碼更容易閱讀第二個解決方案。

你最喜歡的方法是什麼?

感謝

+0

我知道,這個問題可能過於寬泛,但有時我們只需要在正確的方向指向。 另外,如果你有更好的標題,隨時可以改變它。 – FLX 2014-09-04 07:24:04

回答

0

您應該只有一個查詢,而對象然後應該與相關的數據,而不必通過一個ID水合。你可以實現一個水合物或exchangeArray方法:

例如:

public function exchangeArray(array $data){ 
$this->property1=$data['property1']; 
$this->property2=$data['property2']; 
$this->property3=$data['property3']; 
return $this; 
} 

編輯

你也可以在你的對象構造處理此:

public function __construct($argument){ 

    if(is_numeric($argument)){ 
    //treat as ID 
    return $this->findById($argument); 
    }elseif(is_array($argument)){ 
    //hydrate object without call to DB 
    return $this->exchangeArray($argument); 
    } 
} 

您可能希望查看提供現成對象關係映射器層的Doctrine項目:

http://www.doctrine-project.org/projects/orm.html

也看到了Repository模式:

http://martinfowler.com/eaaCatalog/repository.html

+0

謝謝,它看起來像我要找的 – FLX 2014-09-03 12:43:44

+0

不客氣。我也改進了我的答案,請參閱上面的修改。你可以修改你的對象類來接受一個數字ID或一個數組,它可以用給定的數組而不是數據庫來保存對象。如果滿意,請接受答案。 – matwr 2014-09-03 13:07:44

+0

滿意。謝謝 – FLX 2014-09-04 07:20:38