我有三个doctrine2型号:
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);得到一个超时(进程在大约一分钟后被终止)。
有谁有主意吗?
非常感谢!
发布于 2013-07-26 13:50:31
ArrayCollection具有方法contains,该方法检查集合上已存在实体。
if (!$this->getSchoolClasses()->contains($schoolClass)) {
...
}发布于 2015-03-13 08:13:43
我非常肯定你已经找到了你问题的答案,但是对于任何其他搜索这个问题的人来说,Doctrine2中的ArrayCollection可以用条件搜索,条件也是Doctrine2的一部分,工作方式就像DQL一样,这个页面包含了所有需要的信息:
http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-associations.html#filtering-collections
https://stackoverflow.com/questions/17870508
复制相似问题