在表2的主键的一部分上设置表1的外键



首先对不起我的英语)

我有以下表格:

1) rejection_reasons

  • rejection_reason_id

  • locale_code

  • 标题

主键:rejection_reason_id、locale_code

2) order_rejection_reasons

  • order_id

  • rejection_reason_id

主键:order_id

外键:rejection_reason_id(注意!不带字段locale_code


实体:

class RejectionReason
{
    /**
     * @var int
     *
     * @ORMId
     * @ORMColumn(name="rejection_reason_id", type="smallint", length=1, nullable=false)
     */
    private $id;
    /**
     * @var string
     *
     * @ORMId
     * @ORMColumn(name="locale_code", type="string", length=2, nullable=false, options={"fixed"=true})
     */
    private $localeCode;
    /**
     * @ORMOneToMany(targetEntity="OrderRejectionReason", mappedBy="rejectionReason", cascade={"remove", "persist"}, orphanRemoval=true)
     */
    private $orderRejectionReasons;
    /**
     * @param int    $id
     * @param string $localeCode
     */
    public function __construct($id, $localeCode)
    {
        $this->id                    = $id;
        $this->localeCode            = $localeCode;
        $this->orderRejectionReasons = new ArrayCollection();
    }
}

class OrderRejectionReason
{
    /**
     * @var int
     *
     * @ORMColumn(name="order_id", type="integer", nullable=false, options={"unsigned"=true})
     * @ORMId
     * @ORMGeneratedValue(strategy="IDENTITY")
     */
    private $id;
    /**
     * @var RejectionReason
     *
     * @ORMManyToOne(targetEntity="RejectionReason", inversedBy="orderRejectionReasons")
     * @ORMJoinColumns({
     *   @ORMJoinColumn(name="rejection_reason_id", referencedColumnName="rejection_reason_id", nullable=false, onDelete="CASCADE")
     * })
     */
    private $rejectionReason;
}

原则返回错误:

关联"拒绝原因"

的连接列必须与目标实体"应用\实体\拒绝原因"的所有标识符列匹配,但缺少"locale_code"。

你能帮我设置这些表之间的关系吗?

关联"rejectionReason"的连接列必须与所有标识符列匹配,因此您应该查看标识符列。如您所见,localcode 被标记为 id (@ORM\Id) 和 id,这意味着您创建了一个复合主键。

看看: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/composite-primary-keys.html

因为它是复合主键,所以不能只与两个标识符中的一个相关联(JoinColumn,referencedColumnName="id")。

您可以考虑使localeCode唯一,而不是应该可以解决您问题的id。(所以你必须决定本地代码是否应该是一个id)您也可以尝试将 localCode 添加到 JoinColumn 注释中。

尝试不使用额外的大括号和JoinColumn语句

class OrderRejectionReason
{
    /**
     * @var RejectionReason
     *
     * @ORMManyToOne(targetEntity="RejectionReason", inversedBy="orderRejectionReasons")
     * @ORMJoinColumn(name="rejection_reason_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
     */
    private $rejectionReason;
}

编辑一:新增name="rejection_reason_id", referencedColumnName="rejection_reason_id"

编辑二:将referencedColumnName="rejection_reason_id"更改为referencedColumnName="id"

相关内容

  • 没有找到相关文章

最新更新