我有以下问题。实体付款代表付款方式。所以我可以举例说:'信用卡' 2欧元的费用,' PayPal' 1.50欧元等等。
然后我有实体 OrderPaymentItem ,它存储电子商店订单中使用的付款方式。为什么?我需要为每个电子商店订单存储付款,因为当我更改付款费用时,它使用客户在他/她完成订单时使用的费用...如果我将付款直接连接到订单实体而不是OrderPaymentItem,它重新计算旧订单,这是错误的。当你改变费用时,它应该只在新订单中改变......但我不知道如何纠正它。首先看看这两个类:
第一个实体是付款:
class Payment
{
protected $id;
protected $method;
protected $fee;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set fee
*
* @param integer $fee
* @return Payment
*/
public function setFee($fee)
{
$this->fee = $fee;
return $this;
}
/**
* Get fee
*
* @return integer
*/
public function getFee()
{
return $this->fee;
}
/**
* Set method
*
* @param string $method
* @return Payment
*/
public function setMethod($method)
{
$this->method = $method;
return $this;
}
/**
* Get method
*
* @return string
*/
public function getMethod()
{
return $this->method;
}
}
AppBundle\Entity\Payment:
type: entity
table: payment
id:
id:
type: integer
generator:
strategy: AUTO
fields:
method:
column: method
type: string
nullable: false
unique: true
length: 64
fee:
column: fee
type: integer
nullable: false
第二个实体是 OrderPaymentItem :
class OrderPaymentItem
{
protected $id;
protected $method;
protected $fee;
protected $paymentId;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set fee
*
* @param integer $fee
* @return Payment
*/
public function setFee($fee)
{
$this->fee = $fee;
return $this;
}
/**
* Get fee
*
* @return integer
*/
public function getFee()
{
return $this->fee;
}
/**
* Set method
*
* @param string $method
* @return Payment
*/
public function setMethod($method)
{
$this->method = $method;
return $this;
}
/**
* Get method
*
* @return string
*/
public function getMethod()
{
return $this->method;
}
/**
* Set paymentId
*
* @param \AppBundle\Entity\Payment $paymentId
* @return OrderDiscountItem
*/
public function setPaymentId(\AppBundle\Entity\Payment $paymentId = null)
{
$this->paymentId = $paymentId;
return $this;
}
/**
* Get paymentId
*
* @return \AppBundle\Entity\Payment
*/
public function getPaymentId()
{
return $this->paymentId;
}
}
AppBundle\Entity\OrderPaymentItem:
type: entity
table: order_payment_item
id:
id:
type: integer
generator:
strategy: AUTO
fields:
method:
column: method
type: string
nullable: false
length: 64
fee:
column: fee
type: integer
nullable: false
manyToOne:
paymentId:
targetEntity: AppBundle\Entity\Payment
joinColumn:
name: payment_id
referencedColumnName: id
onDelete: SET NULL
nullable: true
最初我有以下篮子形式的表单构建器:
$builder->add('payment', 'entity', [
'label' => 'Platba',
'class' => 'AppBundle:Payment',
'data_class' => 'AppBundle\Entity\Payment',
'property' => 'method',
'multiple' => false,
'expanded' => true
]);
你可以看到这两个类几乎相同。只有OrderPaymentItem包含与付款的关系 - 不是必需的,但有利于后向兼容性。
我现在需要更正它并使用OrderPaymentItem而不是Payment。我需要使用付款清单,但将其保存为OrderPaymentItem。
有人能帮助我吗?
答案 0 :(得分:0)
由于这两个类几乎相同,因此您可以使用Doctrine discriminator。
P.S:我希望现在还不晚......使用鉴别器映射时,例如,如果使用单表继承,则“映射实体”将扩展基本实体。