【问题标题】:Generate Doctrine entity with a "nested" array collection使用“嵌套”数组集合生成 Doctrine 实体
【发布时间】:2015-06-13 09:18:33
【问题描述】:

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

  1. 客户(不相关)
  2. 计算机(ID、客户、序列号、日期、[组件])
  3. 文章组(ID,名称)
  4. 文章(id、名称、价格、articleGroup、活动)

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;
  }


}

【问题讨论】:

    标签: php arrays symfony doctrine-orm


    【解决方案1】:

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

    您可能想要做的是使用连接表创建一个与计算机具有多对多关系的组件实体。

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-04
      • 2011-10-20
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多