未定义索引: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 );