我有三个doctrine2模型:
Person
- $id
- $schoolClasses (ArrayCollection, OneToMany PersonSchoolClass)
SchoolClass
- $id
PersonSchoolClass (ManyToOne SchoolClass)
- $id
- $schoolClass
- $person
- $active
在我的Person::addSchoolClass(SchoolClass $schoolClass)
中,我想知道,SchoolClass
中是否已有ArrayCollection<PersonSchoolClass>
。
我使用此代码:
/**
* @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 :(得分:1)
ArrayCollection
有方法contains
,用于检查该实体是否已收集。
if (!$this->getSchoolClasses()->contains($schoolClass)) {
...
}
答案 1 :(得分:0)
我很确定你已经找到了你的问题的答案,但是对于其他任何搜索它的人来说,可以用Criteria搜索Doctrine2中的ArrayCollection,Criteria也是Doctrine2的一部分,就像DQL一样,这个页面包含所需的所有信息: