gpt4 book ai didi

doctrine - Doctrine 2 中的多态关联?

转载 作者:行者123 更新时间:2023-12-04 05:21:56 25 4
gpt4 key购买 nike

我需要一个具体的代码示例,其中包含使用“多态关联”的 Doctrine 2。
让我澄清一下自己。我有一个名为 Contract 的实体,一个契约(Contract)可以有许多价格规则,这些价格规则可以是不同类型的类并存在于不同的表中。我想这就是多态关联的原因还是我错了?

class contract {

private $id;

private $priceRules;


}

class discountRule implements priceRule{

function calculate() {
// calculate new price after this rule
}
}

class extraSpecialRule implements priceRule {

function calculate() {
// calculate new price after this rule
}
}

future 可能会有新类型的价格规则,那么我如何将这些规则与主要实体相关联并将它们保存在单独的表中?

更新:

这是我的新代码:

契约(Contract).php
namespace Entities;

use Doctrine\Common\Collections\ArrayCollection;


/**
* @Entity @Table(name="contract")
*/
class Contract {

/**
*
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
private $id;

/**
*
* @Column(type="integer")
*/
private $propertyId;

/**
*
* @Column(type="integer")
*/
private $agencyId;

/**
*
* @OneToMany(targetEntity="priceRule" ,mappedBy="contract")
*
*/
private $priceRules;

public function __construct($propertyId,$agencyId){
$this->propertyId=$propertyId;
$this->agencyId=$agencyId;
$this->priceRules=new ArrayCollection();
}

public function addPriceRule(priceRule $rule){
$this->priceRules[]=$rule;
}

public function getPriceRules(){
return $this->priceRules;
}
}

价格规则.php
namespace Entities;

/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr" , type="string")
* @DiscriminatorMap({"discountrule"="discountRule","extradiscountrule"="extraDiscountRule"})
*/
class priceRule{
/**
*
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
private $id;

/**
*
* @ManyToOne(targetEntity="contract",inversedBy="availibilityRules")
* @JoinColumn("contract_id",referencedColumnName="id")
*/
private $contract;

}

折扣规则.php
namespace Entities;

/**
* @Entity
*
*
*/
class discountRule extends priceRule {

/**
*
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
private $id;

public function calculatePrice(){
// calculate new price
}

}

额外折扣规则.php
namespace Entities;

/**
* @Entity
*
*
*/
class extraDiscountRule extends priceRule {

/**
*
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
private $id;


public function calculate() {
// calculate new price
}

}

示例用法.php
$contract=new Contract(1,1);
$discount=new discountRule();

$em->persist($discount);

$contract->addPriceRule($discount);

$em->persist($contract->getPriceRules());
$em->persist($contract);

$em->flush();

但是当我尝试向契约(Contract)添加新规则时,我收到错误消息( fatal error :未捕获的异常 'Doctrine\ORM\Mapping\MappingException' 带有消息 'Class Doctrine\Common\Collections\ArrayCollection is not a valid entity or mapping super class .)

我究竟做错了什么 ?

最佳答案

您可能在 PriceRule 父对象上缺少 @MappedSuperclass

引用:Inheritance Mapping

关于doctrine - Doctrine 2 中的多态关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com