2013-07-25 40 views
2

匹配我有三個doctrine2型號:的ArrayCollection ::有關係

Person 
- $id 
- $schoolClasses (ArrayCollection, OneToMany PersonSchoolClass) 

SchoolClass 
- $id 

PersonSchoolClass (ManyToOne SchoolClass) 
- $id 
- $schoolClass 
- $person 
- $active 

在我Person::addSchoolClass(SchoolClass $schoolClass),我想看看,是否已經有我的ArrayCollection<PersonSchoolClass>一個SchoolClass

我用這個代碼:

/** 
* @param SchoolClass $schoolClass 
* @return Person 
*/ 
public function addSchoolClass(SchoolClass $schoolClass) 
{ 
    $criteria = Criteria::create() 
     ->where(Criteria::expr()->eq("schoolClass.id", $schoolClass->getId())) 
     ->setFirstResult(0) 
     ->setMaxResults(1); 

    $t = $this->getSchoolClasses()->matching($criteria); 

    if (!$t) { 
     $t = new PersonSchoolClass(); 
     $t->setPerson($this); 
     $t->setSchoolClass($schoolClass); 
     $this->getSchoolClasses()->add($schoolClass); 
    } 

    $t->setActive(); 

    return $this; 
} 

但我一直在$this->getSchoolClasses()->matching($criteria);得到超時(進程得到一分鐘左右後被殺)。

有沒有人有想法?

非常感謝!

+0

你們是不是要檢查,如果你的'SchoolClass'存在於集合中添加它已經過嗎? – AlexP

+0

@ALexP是的,正好 – Ueli

回答

1

ArrayCollection有方法contains它檢查已收集的實體。

if (!$this->getSchoolClasses()->contains($schoolClass)) { 
    ... 
} 
+0

+1這就是我要說的 – AlexP

+0

謝謝你的回答。不,這不起作用,因爲$ schoolClasses包含PersonSchoolClass的元素,而不是SchoolClass。 – Ueli