class Order{
/**
* @var integer
*
* @ORM\Column(name="order_id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $orderId;
/**
* @ORM\OneToOne(targetEntity="OrderDiscount")
* @ORM\JoinColumn(name="order_id", referencedColumnName="order_id")
*/
private $discount;
/**
* @ORM\OneToOne(targetEntity="OrderTax")
* @ORM\JoinColumn(name="order_id", referencedColumnName="order_id")
*/
private $tax;
/**
* @ORM\OneToOne(targetEntity="OrderPayments")
* @ORM\JoinColumn(name="order_id", referencedColumnName="order_id")
*/
private $payment;
}
class OrderDiscount{
/**
* @var integer
*
* @ORM\Column(name="order_id", type="bigint")
* @ORM\Id
*/
private $id;
/**
* @var float
*
* @ORM\Column(name="discount", type="float", precision=10, scale=0, nullable=false)
*/
private $discount;
}
class OrderPayments{
/**
* @var integer
*
* @ORM\Column(name="order_id", type="bigint", nullable=false)
* @ORM\Id
*/
private $id;
/**
* @var float
*
* @ORM\Column(name="payment_amount", type="float", precision=10, scale=0, nullable=true)
*/
private $paymentAmount;
}
class OrderTax{
/**
* @var integer
*
* @ORM\Column(name="order_id", type="bigint", nullable=false)
* @ORM\Id
*/
private $id;
/**
* @var float
*
* @ORM\Column(name="tax_amount", type="float", precision=10, scale=0, nullable=false)
*/
private $taxAmount;
}
这是我的代码(这里只显示基本代码)。 当我迁移这个架构时,一个索引已经存在,当我在数据库中检查索引不存在时。 因为使用列名生成索引的学说,因为所有关联都有相同的列,这就是为什么doctrine说索引已经存在。
还有其他更好的方法吗?
答案 0 :(得分:0)
是的,有更好的方法可以做到这一点。
您尝试做什么,根本不起作用,因为doctrine尝试从Order实体表的“order_id”列创建一个外键,指向每个“order_id”折扣,税,付款实体表的列。
您真正想要的是使主键order_id 成为外键,也是折扣,税和付款表中的主键。
实现这一目标:
以下是代码:
class Order{
/**
* @var integer
*
* @ORM\Column(name="order_id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $orderId;
/**
* @ORM\OneToOne(targetEntity="OrderDiscount", mappedBy="orderId")
*/
private $discount;
/**
* @ORM\OneToOne(targetEntity="OrderTax")
* @ORM\JoinColumn(name="order_id", referencedColumnName="order_id")
*/
private $tax;
}
class OrderDiscount{
/**
* @var integer
*
* @ORM\OneToOne(targetEntity="Order", inversedBy="discount")
* @ORM\JoinColumn(name="order_id", referencedColumnName="order_id")
* @ORM\Id
*/
private $orderId;
/**
* @var float
*
* @ORM\Column(name="discount", type="float", precision=10, scale=0, nullable=false)
*/
private $discount;
}
class OrderTax{
/**
* @var integer
*
* @ORM\OneToOne(targetEntity="Order", inversedBy="tax")
* @ORM\JoinColumn(name="order_id", referencedColumnName="order_id")
* @ORM\Id
*/
private $orderId;
/**
* @var float
*
* @ORM\Column(name="tax_amount", type="float", precision=10, scale=0, nullable=false)
*/
private $taxAmount;
}
请注意
@ORM\Column(name="order_id", type="bigint", nullable=false)
,因为它被定义为外键,它将被创建为与其“指向”的列相同的类型(在本例中为订单的order_id) )。