繁体   English   中英

使用“嵌套”数组集合生成Doctrine实体

[英]Generate Doctrine entity with a “nested” array collection

我正在构建一个计算机配置器并获得了四个实体。

  1. 客户(不相关)
  2. 电脑(id,customer,serial,date,[components])
  3. ArticleGroup(id,name)
  4. 文章(id,name,price,articleGroup,active)

Computer实体的属性[components]应包含如下数组:

    $components = array(
  'CPU' => array(
    'name' => 'Intel Core i7',
    'count' => 1,
    'price' => 275),
  'Mainboard' => array(
    'name' => 'Gigabyte H97-D3H',
    'count' => 1,
    'price' => 75),
  'RAM' => array(
    'name' => '4GB DDRIII Kingston Value Ram',
    'count' => 4,
    'price' => 28),
  'SSD' => array(
    'name' => '512GB Samsung 850 Pro',
    'count' => 1,
    'price' => 400)
  );

数组密钥价格可能与文章实体的价格不同。(因为硬件的每日价格或因为我认为这个客户以较少的钱获得cpu)

现在问题我不知道如何创建这个组件数组集合。

这是我的电脑实体:

    <?php

namespace ctcrm\ConfiguratorBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Computer
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Computer
{
  /**
   * @var integer
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  /**
   * @var string
   * @Assert\NotBlank()
   * @Assert\Length(
   *      min = 12,
   *      max = 12,
   *      minMessage = "no valid serial!",
   *      maxMessage = "no valid serial!"
   * )
   * @ORM\Column(name="serial", type="string", length=12)
   */
  private $serial;

  /**
   * @var \DateTime
   * @Assert\NotBlank()
   * @ORM\Column(name="date", type="date")
   */
  private $date;

  /**
   * @ORM\ManyToOne(targetEntity="Customer")
   * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
   * @Assert\NotBlank()
   **/
  private $customer;

  /**
   * Get id
   *
   * @return integer
   */
  public function getId()
  {
    return $this->id;
  }

  /**
   * Set serial
   *
   * @param string $serial
   * @return Computer
   */
  public function setSerial($serial)
  {
    $this->serial = $serial;

    return $this;
  }

  /**
   * Get serial
   *
   * @return string
   */
  public function getSerial()
  {
    return $this->serial;
  }

  /**
   * Set date
   *
   * @param \DateTime $date
   * @return Computer
   */
  public function setDate($date)
  {
    $this->date = $date;

    return $this;
  }

  /**
   * Get date
   *
   * @return \DateTime
   */
  public function getDate()
  {
    return $this->date;
  }

  /**
   * @return mixed
   */
  public function getCustomer()
  {
    return $this->customer;
  }

  /**
   * @param mixed $customer
   */
  public function setCustomer($customer)
  {
    $this->customer = $customer;
  }


}

没有(可靠的)在SQL表中拥有数组的方法。 您需要对数据执行序列化,如果可以避免,则不建议这样做。

您可能想要做的是使用Join表创建一个与Computers有多对多关系的Component Entity。

请参阅Doctrine文档: http//doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#many-to-many-unidirectional

您将希望方向性从“计算机”到“组件”,因为计算机包含许多组件,但不包含反向组件。 多对一关系需要重复的组件条目(引用物理对象而不是使用型号的分类),而多对多关系允许您填充组件列表,并在计算机中引用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM