2

我有三个学说2模型:

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

SchoolClass
 - $id

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

在 myPerson::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);但我总是在(一分钟左右后进程被杀死)超时。

有人有想法吗?

非常感谢!

4

2 回答 2

1

ArrayCollection具有contains检查该实体是否已在收集中的方法。

if (!$this->getSchoolClasses()->contains($schoolClass)) {
    ...
}
于 2013-07-26T05:50:31.300 回答
0

我很确定您已经找到了问题的答案,但是对于搜索此问题的任何其他人,可以使用 Criteria 搜索 Doctrine2 中的 ArrayCollection,Criteria 也是 Doctrine2 的一部分,并且与 DQL 一样工作,此页面包含所有所需资料:

http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-associations.html#filtering-collections

于 2015-03-13T00:13:43.153 回答