【问题标题】:Symfony 2.3 Join tables using composite keysSymfony 2.3 使用复合键连接表
【发布时间】:2016-09-03 12:03:32
【问题描述】:

有一个带有复合键的元素类。 当我运行 php app/console 学说:模式:验证 我收到以下错误

关联“parentElement”的连接列必须匹配到 目标实体的所有标识符列 'AgRecord\AppBundle\Entity\Element',但是 'id, parent_uuid' 是 不见了。

我遗漏了什么或如何正确描述这种关系?

<?php

use Doctrine\ORM\Mapping as ORM;

/**
 * Elements
 *
 * @ORM\Table(name="elements",uniqueConstraints={@ORM\UniqueConstraint(name="search_idx", columns={"uuid", "id", "parent_uuid"})})
 * @ORM\Entity
 */
class Element
{


    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", columnDefinition="INT AUTO_INCREMENT UNIQUE")
     * @ORM\Id
     */
    private $id;   

    /**
     * @var guid
     * @ORM\Id
     * @ORM\Column(name="uuid", type="string", unique=true, nullable=false)
     */
    private $uuid;

    /**
     * @var guid
     * @ORM\Id
     * @ORM\Column(name="parent_uuid", type="string")
     */
    private $parentUUID;


    /**
    * @ORM\ManyToOne(targetEntity="Element", inversedBy="childElements")
    * @ORM\JoinColumn(name="uuid", referencedColumnName="parent_uuid")
    */
    private $parentElement;


    /**
    * @ORM\Id
    * @ORM\OneToMany(targetEntity="Element", mappedBy="parentElement")
    * @ORM\JoinColumn(name="uuid", referencedColumnName="element_uuid")
    */
    private $childElements;

}

【问题讨论】:

  • 这是您的最小可行代码示例吗?请清理与问题无关的代码混乱。
  • @QualityCatalyst 抱歉,已清理完毕。

标签: php symfony orm doctrine-orm


【解决方案1】:

我很愚蠢,我把所有的映射都搞混了......

我解决了我的问题。

首先我决定只删除 id 并拥有 uuid,这意味着我不需要复合键。

然后需要从所有非主要字段中删除愚蠢放置的@Id

然后删除 $parentUUID。 我做错了,不理解映射,并在不需要时使用了额外的参考。

然后从子元素中删除连接的注释,并确保在父元素上正确设置了 inversedby。

父连接注解上的名字需要是关联的类成员的名字。

<?php

use Doctrine\ORM\Mapping as ORM;

/**
 * Elements
 *
 * @ORM\Table(name="elements")
 * @ORM\Entity
 */
class Element
{

    private $id;   

    /**
     * @var guid
     * @ORM\Id
     * @ORM\Column(name="uuid", type="string", unique=true, nullable=false)
     */
    private $uuid;

    /**
    * @ORM\ManyToOne(targetEntity="Element", inversedBy="childElements")
    * @ORM\JoinColumn(name="parentElement", referencedColumnName="uuid")
    */
    private $parentElement;


    /**
    * @ORM\OneToMany(targetEntity="Element", mappedBy="parentElement")
    */
    private $childElements;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2017-10-25
    • 2014-03-22
    相关资源
    最近更新 更多