我收到通知:未定义的索引:joinTable

时间:2018-02-14 09:05:48

标签: php symfony doctrine sonata

我正在使用一些Sonata软件包在Symfony 2.8应用程序上构建一个新功能。

我的Page.orm.xml文件包含以下内容:

    <one-to-many target-entity="AppBundle\Entity\Synonym" field="equivalents" mapped-by="page">
        <cascade>
            <cascade-all/>
        </cascade>
    </one-to-many>

...我的Synonym.php实体定义包含以下内容:

/**
 * @var \Application\Sonata\PageBundle\Entity\Page
 * @ORM\ManyToOne(targetEntity="Application\Sonata\PageBundle\Entity\Page", inversedBy="equivalents", cascade={"persist"})
 */
private $page;

...我的PageAdmin.php文件包含以下内容:

            ->add('equivalents', 'sonata_type_collection', array(
                'label' => "Equivalents",
                'cascade_validation' => true,
                'required' => false,
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
                'targetEntity' => 'AppBundle\Entity\Synonym',
                'admin_code' => 'app.admin.synonym',
            ))

...当我尝试加载页面管理界面时,我收到此错误:

  

注意:未定义的索引:joinTable

所以我的问题是:我需要添加什么才能让Symfony对这种关系感到满意?

编辑#1:不要问我为什么要使用&#34;等价物&#34;而不是&#34;同义词。&#34;这是一个漫长而奇怪的故事,不值得进入这里。

编辑#2:对于它的价值,我认为这不是一个重复的问题,因为我正在寻找一种在现有供应商的背景下开发的方法图书馆。例如,&#34;编辑核心Doctrine功能以避免此索引&#34;会解决链接问题,但它不能解决我的问题,因为我需要在现有系统的约束下工作。

2 个答案:

答案 0 :(得分:2)

你有它......;)

您应该定义@ORM\JoinTable

/**
 * @var \Application\Sonata\PageBundle\Entity\Page
 * @ORM\ManyToOne(targetEntity="Application\Sonata\PageBundle\Entity\Page", inversedBy="equivalents", cascade={"persist"})
 * @ORM\JoinTable(name="page_id", referencedColumnName="id")
 */
private $page;

你还有错误吗?

答案 1 :(得分:0)

Preciel上面的评论包含了我的情况。

如果他们将其作为答案发布,我将很乐意接受这个答案。