首先对不起我的英语)
我有下表:
1)拒绝原因
rejection_reason_id
语言环境代码
标题
主键: reject_reason_id,语言环境代码
2) order_rejection_reasons
order_id
rejection_reason_id
主键: order_id
外键: reject_reason_id(注意!,不包含字段 locale_code )
实体:
class RejectionReason
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(name="rejection_reason_id", type="smallint", length=1, nullable=false)
*/
private $id;
/**
* @var string
*
* @ORM\Id
* @ORM\Column(name="locale_code", type="string", length=2, nullable=false, options={"fixed"=true})
*/
private $localeCode;
/**
* @ORM\OneToMany(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
*
* @ORM\Column(name="order_id", type="integer", nullable=false, options={"unsigned"=true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var RejectionReason
*
* @ORM\ManyToOne(targetEntity="RejectionReason", inversedBy="orderRejectionReasons")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="rejection_reason_id", referencedColumnName="rejection_reason_id", nullable=false, onDelete="CASCADE")
* })
*/
private $rejectionReason;
}
Doctrine返回错误:
关联“ rejectionReason”的联接列必须与目标实体“ App \ Entity \ RejectionReason”的所有标识符列匹配,但是缺少“ locale_code”。
您能帮我设置这些表之间的关系吗?
答案 0 :(得分:2)
关联“ 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,这应该可以解决您的问题。(因此,您必须确定localCode是否应为ID)。您还可以尝试将localCode添加到JoinColumn批注中。
答案 1 :(得分:0)
尝试不使用大括号和JoinColumn
语句
class OrderRejectionReason
{
/**
* @var RejectionReason
*
* @ORM\ManyToOne(targetEntity="RejectionReason", inversedBy="orderRejectionReasons")
* @ORM\JoinColumn(name="rejection_reason_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
private $rejectionReason;
}
编辑我:
添加了name="rejection_reason_id", referencedColumnName="rejection_reason_id"
编辑II:
将referencedColumnName="rejection_reason_id"
更改为referencedColumnName="id"