2013-06-05 42 views
1

公司對象可以有許多站點對象。 對於給定的公司,我想知道主要網站。 (isPrimary是Site的一個屬性)。在Symfony2中使用的原則自定義DQL或循環

我在公司類中寫了一個名爲getPrimarySite()的函數,並且像這樣實現了它。

public function getPrimarySiteForCompany() 
    { 
     foreach($this->getSite() as $site) 
     { 
      if($site->isPrimary()) 
      { 
       return $site; 
      } 
     } 

     return false; 
    } 

這是正確的或者是它更好地寫在CompanyRepository一個自定義的庫函數,其中我與DQL主站點?

+3

這可能很好,但它的方式。您始終可以使用分析器來確定它是否會減慢速度。爲了儘量減少延遲加載,我曾經花費大量精力進行自定義查詢。但對於我的模型來說,簡單的基準線標誌顯示這種努力沒有什麼收穫。 – Cerad

回答

1

如果一個公司只能有一個主站點,自然的解決方案是將一個新的屬性Company::$primarySite添加到公司實體。這將是[One | Many] ToOne關係(取決於一個網站是否可以屬於多個公司)。查找速度會很快,然後您的數據層會執行公司只能擁有一個主站點的邏輯。這比在網站上使用isPrimary標誌更有意義,然後必須確保屬於同一公司的兩個站點沒有同時設置該標誌。

1

儘管編寫自定義存儲庫函數來加入數據並防止延遲加載並不難,但這是premature optimization的一個很好的示例。

讓它保持現在的樣子,一旦所有東西在生產環境中都能正常工作,您可以回到開發環境並使用分析器查看哪些方面可以提高性能。此外,如果您只希望看到幾個Site對象,那麼它可能並不重要,如果有的話。