首先对不起我的英语)
我有以下表格:
1) 拒绝原因
拒绝原因\u id
区域设置\u代码
标题
主键:拒绝\u原因\u id、区域设置\u代码
2) 订单拒绝原因
订单号
拒绝原因\u id
主键:订单号
外键:拒绝原因id(注意!无字段区域设置(U代码)
实体:
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;
}
条令返回错误:
关联“rejectionreason”的联接列必须与目标实体“app\entity\rejectionreason”的所有标识符列匹配,但是缺少“locale\u code”。
你能帮我把这些table之间的关系定好吗?
2条答案
按热度按时间wvmv3b1j1#
关联“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注解中。
omhiaaxx2#
试着不用额外的花括号和
JoinColumn
陈述编辑一:添加
name="rejection_reason_id", referencedColumnName="rejection_reason_id"
编辑ii:更改referencedColumnName="rejection_reason_id"
至referencedColumnName="id"