未定义索引:joinColumns+;symfony2

未定义索引:joinColumns+;symfony2,symfony,orm,doctrine-orm,doctrine,Symfony,Orm,Doctrine Orm,Doctrine,我的项目中有以下实体结构 class MyEntity { [... some more fields...] /** * @Type("array<string, string>") * @ORM\ManyToMany(targetEntity="Me\MyBundle\Entity\Example") * @ORM\JoinTable(name="example_myentity", * joinColumns={@ORM\JoinColumn(name="

我的项目中有以下实体结构

class MyEntity
{
 [... some more fields...]
 /**
 * @Type("array<string, string>")
 * @ORM\ManyToMany(targetEntity="Me\MyBundle\Entity\Example")
 * @ORM\JoinTable(name="example_myentity",
 *      joinColumns={@ORM\JoinColumn(name="plan_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="example", referencedColumnName="label")}
 * )
 */
private $example;
}



class Example
{

/**
 * @ORM\Id
 * @ORM\Column(name="label", type="string", length=50, unique=true, nullable=false)
 */
private $label;
}
我在堆栈跟踪中观察到,第二个参数“$assoc”始终为null,我认为这就是为什么Doctrine不生成JOIN语句的原因

有什么想法吗


谢谢

我相信这可能是一个bug

我也有同样的问题,目前唯一的解决办法似乎是等待BasicEntityPersister的更新,或者直接编写查询

首先将存储库添加到类中

/**
 * MyClass
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\MyClassRepository")
 */
class MyClass
...
然后在你的repositoryclass中:

class MyClassRepository extends EntityRepository
{
    public function findByExample( Example $example )
    {
         return $this->getEntityManager()
                ->createQueryBuilder()
                ->select('m')
                ->from('AcmeDemoBundle:MyClass', 'm')
                ->innerJoin('m.examples', 'e')
                ->where('e.id = :exampleid' )
                ->setParameter('exampleid', $example->getId() )
                ->getQuery()
                ->getResult();
    }
}
最后,您可以通过以下方式获得与示例相关的所有MyClass实例:

$this->getDoctrine()->getManager()->getRepository('AcmeDemoBundle:MyClass')->findByExample( $example );

你更新数据库了吗?是的,都是最新的。数据库已更新,缓存已清除…如果是多对多,那么MyEntity不应该。$example是$examples吗?您是否将其初始化为构造函数中的条令数组?是的,我正在初始化它作为构造器中的一个原则数组,当我得到MyEntity的列表时,例如,我得到了所有没有问题的参数,问题是当我尝试过滤它时。我也认为这是一个bug,我创建了以下bug报告:其中还包含一个修补程序,修复了该问题。指向bug的链接已失效
$this->getDoctrine()->getManager()->getRepository('AcmeDemoBundle:MyClass')->findByExample( $example );