首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArrayCollection::匹配关系

ArrayCollection::匹配关系
EN

Stack Overflow用户
提问于 2013-07-26 07:32:23
回答 2查看 4.2K关注 0票数 2

我有三个doctrine2型号:

代码语言:javascript
复制
Person
 - $id
 - $schoolClasses (ArrayCollection, OneToMany PersonSchoolClass)

SchoolClass
 - $id

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

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

我使用以下代码:

代码语言:javascript
复制
/**
 * @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);得到一个超时(进程在大约一分钟后被终止)。

有谁有主意吗?

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2013-07-26 13:50:31

ArrayCollection具有方法contains,该方法检查集合上已存在实体。

代码语言:javascript
复制
if (!$this->getSchoolClasses()->contains($schoolClass)) {
    ...
}
票数 1
EN

Stack Overflow用户

发布于 2015-03-13 08:13:43

我非常肯定你已经找到了你问题的答案,但是对于任何其他搜索这个问题的人来说,Doctrine2中的ArrayCollection可以用条件搜索,条件也是Doctrine2的一部分,工作方式就像DQL一样,这个页面包含了所有需要的信息:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17870508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档