未定义的索引:joinColumns doctrine + symfony2

时间:2013-08-20 09:15:06

标签: 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="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;
}

当我尝试使用Doctrine的findby()函数获取“$ example”时,我收到了以下通知:

  

未定义的索引:joinColumns

我试图调试它,问题似乎在函数中的教义文件BasicEntityPersister.php中

 _getSelectEntitiesSQL($criteria, $assoc = null, $lockMode = 0, $limit = null, $offset = null, array $orderBy = null),

我在堆栈跟踪中观察到第二个参数“$ assoc”始终为null ,我认为这就是为什么Doctrine不会生成JOIN语句。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:4)

我认为这是一个错误,可能是this one

我有同样的问题,现在唯一的解决办法似乎是等待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 );