Doctrine2:检查Doctrine Collection中是否存在值

spi*_*iil 13 arraycollection symfony doctrine-orm

如何检查Doctrine Collection(ManyToMany关系)字段中是否存在给定值?

例如,我尝试:

$someClass = $this->
             getDoctrine()->
             getRepository('MyBundle:MyClass')->
             find($id);

if (!$entity->getMyCollectionValues()->get($someClass->getId())) {

    $entity->addMyCollectionValue($someClass);

}
Run Code Online (Sandbox Code Playgroud)

但这当然不正确.那么,如何避免重复键?

Air*_*ram 30

你可以这样做:

$object = $this->getDoctrine()->getRepository('MyBundle:MyClass')->find($id);

if ( !$entity->getMyCollectionValues()->contains($object) ) {
    $entity->addMyCollectionValue($object);
}
Run Code Online (Sandbox Code Playgroud)

您可以在http://www.doctrine-project.org/api/common/2.1/class-Doctrine.Common.Collections.ArrayCollection.html查看 Doctrine ArrayCollection的可用功能.

  • 当我们已经拥有该对象的id时,是否有一种Doctrine方式检查而不在开始时执行另一个查询来获取我们正在搜索的对象?为什么我不能问收藏品是否有带有该ID的条目?我不能为此添加另一个查询. (3认同)
  • @grantwparks是的,您可以使用`$ object = $ em-> getReference('MyBundle:MyClass',$ id)`来获取实体引用,如果实体已经在缓存中,它将返回引用,或者是惰性引用如果不是.调用`$ object-> getId()`不会导致实体加载,这就是我认为`contains()`使用的. (2认同)