我正在建立一个计算机配置器,并有四个实体。
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;
}
}
答案 0 :(得分:3)
没有(可靠的)在SQL表中拥有数组的方法。您需要对数据执行序列化,如果可以避免,则不建议这样做。
您可能想要做的是使用Join表创建一个与计算机有多对多关系的Component Entity。
请参阅Doctrine文档:http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#many-to-many-unidirectional
您将希望方向性从“计算机”到“组件”,因为计算机包含许多组件,但不包含反向组件。多对一关系需要重复的组件条目(引用物理对象而不是使用型号的分类),而多对多关系允许您填充组件列表,并在计算机中引用它们。