2

私は 3 つの 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);ます(プロセスは1分ほど後に強制終了されます)。

誰にもアイデアがありますか?

どうもありがとうございました!

4

2 に答える 2

1

ArrayCollectioncontainsすでにコレクションにあるエンティティをチェックするメソッドがあります。

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