首先对不起我的英语)
我有以下表格:
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"