我有两个实体Modules
和Orders
,其中一个订单具有多个模块,我想知道如何获取持久化的模块数组集合,如下所示:
Table: Orders
id | modules | user_id | ... | created_at |
----------------------------------------------------
1 | [2,6,5] | 12 | ... | 2018-07-28 00:00:00 |
----------------------------------------------------
如您所见,我的模块以数组形式保存。因此,在那之后我该如何制作教义(使用Symfony)来获取我的模块
答案 0 :(得分:2)
我认为您需要一个ManyToOne RelationShip ...据我所知,我们从不将数组存储在数据库中。
在您的示例中,订单可以有多个模块,而模块只能有一个订单... 在这种情况下,顺序称为拥有方,而模块称为反向方... 和模块保留订单ID ...
看这个例子
表格:订单
id | user_id | ... | created_at |
----------------------------------------------------
1 | 12 | ... | 2018-07-28 00:00:00 |
----------------------------------------------------
表:模块
id | order_id | ... | created_at |
----------------------------------------------------
1 | 1 | ... | 2018-07-28 00:00:00 |
----------------------------------------------------
2 | 1 | ... | 2018-07-29 00:00:00 |
----------------------------------------------------
您必须这样编写代码...
订单类
class Order implements OrderInterface
{
/**
* @var Collection
*
* @ORM\OneToMany(targetEntity="Module", mappedBy="order", cascade={"persist"})
*/
protected $modules;
/**
* Don't forget initial your collection property
* Order constructor.
*/
public function __construct()
{
$this->modules = new ArrayCollection();
}
/**
* @return Collection
*/
public function getModules(): Collection
{
return $this->modules;
}
/**
* @param ModuleInterface $module
*/
public function addModule(ModuleInterface $module): void
{
if ($this->getModules()->contains($module)) {
return;
} else {
$this->getModules()->add($module);
$module->setOrder($this);
}
}
/**
* @param ModuleInterface $module
*/
public function removeModule(ModuleInterface $module): void
{
if (!$this->getModules()->contains($module)) {
return;
} else {
$this->getModules()->removeElement($module);
$module->removeOrder($this);
}
}
}
模块类
class Module implements ModuleInterface
{
/**
* @var OrderInterface
*
* @ORM\OneToMany(targetEntity="Order", mappedBy="modules", cascade={"persist"})
*/
protected $order;
/**
* @param OrderInterface $order
*/
public function setOrder(OrderInterface $order)
{
$this->order = order;
}
public function getOrder(): OrderInterface
{
return $this->order;
}
}
当您按教义持久地订购对象时...教义会处理并创建物品