未定义索引:joinColumns 学说 + symfony2

Posted

技术标签:

【中文标题】未定义索引:joinColumns 学说 + symfony2【英文标题】:Undefined index: joinColumns doctrine + symfony2 【发布时间】:2013-08-20 09:15:05 【问题描述】:

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

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”总是为空,我认为这就是为什么 Doctrine 没有做出 JOIN 语句的原因。

有什么想法吗?

谢谢

【问题讨论】:

你更新数据库了吗? 是的,它都是最新的。数据库已更新,缓存已清除... 如果是多对多,那么 MyEntity.$example 不应该是 $examples 吗?您是否在构造函数中将其初始化为教义数组? docs.doctrine-project.org/projects/doctrine-orm/en/latest/… 是的,我在构造函数中将它初始化为一个学说数组,例如当我获取 MyEntity 列表时,我得到所有参数都没有问题,问题是当我尝试过滤它时。 【参考方案1】:

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

我有同样的问题,目前唯一的解决方案似乎是等待 BasicEntityPersister 的更新或编写您的查询,这非常简单。

首先给你的类添加一个仓库

/**
 * MyClass
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\MyClassRepository")
 */
class MyClass
...

然后在您的存储库类中:

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 );

【讨论】:

我也认为这是一个错误,我创建了以下错误报告:doctrine-project.org/jira/browse/DDC-2988 其中还包含一个修复该问题的补丁。 错误链接已失效

以上是关于未定义索引:joinColumns 学说 + symfony2的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:调用未定义的方法 MyModule\Entity\MyEntity::findAll() 学说 orm 2 zf2

mariadb 上的学说行为可翻译索引标识符太长

Symfony2 项目中的 Doctrine2 映射问题

JPA @JoinColumn 自定义对象类型

学说自定义 MariaDB 平台

@JoinColumn