将表值加载到对象变量中而不进行映射



我有以下数据模型

Product: id, description, price
ProductExtraField: id, name
ProductExtraFieldData: product_id, extra_field_id, value

我想使用此数据模型,以便我的应用程序用户可以动态向产品添加额外的属性。假设添加属性"颜色"。当他们这样做时,将在ProductExtraField表中创建一个行,其值如下:6,"颜色"。现在,可以将此属性的值添加到那里的产品。执行此操作时,将在ProductExtraFieldData表中创建一个新行,其值如下:4, 6, 'Green'。现在我想在一个名为 Product 的类中表示这个模型。我使用以下代码:

<?php
use DoctrineCommonCollectionsArrayCollection;
/** @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甚至应该是静态的。如何配置原则以加载这些值?不需要保留 Product 类中的$extraField值。

也许是像下面这样的结构:

产品

  • 编号
  • 描述
  • 等。。。

产品外场

  • product_id
  • extra_field_id
  • 价值

外场

  • 编号
  • 标签
  • (还有别的吗?

因此,您的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)

相关内容

  • 没有找到相关文章

最新更新