2014-06-05 23 views
0

我目前有一個Property實體,它與PropertyRates有關係。我需要找出最新的PropertyRate已更新。目前我在Property實體中有一個函數來循環關聯的PropertyRates並返回最新的PropertyRate-> dateModified。內存很快就會通過數千個屬性循環。主義實體通過另一個實體循環

public function getRatesDateModified() 
{ 
    $retval = new \DateTime("2000-01-01T06:00:00Z"); 
    foreach($this->propertyRates as $rate) { 
     if($retval < $rate->getDateModified()) { 
      $retval = $rate->getDateModified(); 
     } 
    } 

    return $retval; 
} 

這是這個功能應該坐哪裏?將它放在存儲庫中似乎不太合適,因爲它只針對單個實體,但不能訪問EntityManager,因此我可以分離出耗盡內存的PropertyRates。

回答

1

如果您使用的是教條,我可以建議使用filtering api。也許是這樣的。

<?php 

use Doctrine\Common\Collections\Criteria; 

$entity = $entityManager->find('Entity', $id); 
$propertyRates = $entity->getPropertyRates(); 

$criteria = Criteria::create() 
    ->where(Criteria::expr()->orderBy(["dateModified"])) 
    ->setFirstResult(0) 
    ->setMaxResults(20); 

$result = $userCollection->matching($criteria)[0]; 
+0

$ group從哪裏來?另外,這個代碼放在哪裏?我目前在哪裏調用getRatesDateModified()? – BeaverusIV

+0

這是一個複製和粘貼示例,其中包含文檔的修改。 $實體應該是包含PropertyRates集合的實體。我建議將這些代碼放在一個Repository中。 – GingerTech

+0

我會接受你的答案,因爲它是正確的做法,但它對我來說不起作用,就像教條的每一部分一樣,它會拋出一些無用的錯誤。我將在Repo中使用DQL查詢。 – BeaverusIV