我有以下数据模型
Product: id, description, price
ProductExtraField: id, name
ProductExtraFieldData: product_id, extra_field_id, value
我想使用此数据模型,因此我的应用程序的用户可以动态地为产品添加额外的属性。让我们说添加属性'Color'。当他们这样做时,将在ProductExtraField
表中创建一行,其值如下: 6,'Color'。现在可以为此产品添加此属性的值。执行此操作时,将在ProductExtraFieldData
表中创建一个新行,其值为: 4,6,'Green'。现在我想在名为Product
的类中表示此模型。我使用以下代码:
<?php
use Doctrine\Common\Collections\ArrayCollection;
/** @Entity @Table(name="product") **/
class Product
public function __construct() {
$this->extraFieldData = new ArrayCollection();
$this->extraField = new ArrayCollection();
}
/** @Id @Column(name="id", type="integer") @GeneratedValue **/
private $id;
/** @Column(name="description", type="string") **/
private $description;
/** @Column(name="price", type="float") **/
private $price;
/**
* @OneToMany(targetEntity="ProductExtraFieldData", mappedBy="product", cascade={"persist"})
* @JoinColumn(name="product_id", referencedColumnName="id")
* @var extraFieldData[]
**/
protected $extraFieldData = null;
/**
* @OneToMany(targetEntity="ProductExtraField", mappedBy="??????")
* @var extraField[]
**/
protected $extraField = null;
当然最后几行不正确。我不知道如何加载这些数据。我希望每个产品都可以使用额外字段的名称。我认为$extraField
甚至应该是静态的。如何配置Doctrine加载这些值? 1}}类中保留$extraField
值不是必需的。
答案 0 :(得分:0)
也许是以下结构:
<强>产品强>
<强> ProductExtraField 强>
<强> ExtraField 强>
因此,您的Product
将在ProductExtraField
上有一个OneToMany映射,其ManyToOne
映射到ExtraField
。允许您使用诸如......之类的代码。
$extraValues = array();
foreach ($product->getExtraFields() as $productExtraField) {
$extraValues[$productExtraField->getExtraField()->getLabel()] = $productExtraField->getValue();
}
// builds array such as array('colour' => 'blue', 'size' => 'small)