Symfony主义:获取以数组形式保存的集合

时间:2018-07-28 18:23:57

标签: php doctrine symfony4

我有两个实体ModulesOrders,其中一个订单具有多个模块,我想知道如何获取持久化的模块数组集合,如下所示:

Table: Orders

id | modules | user_id | ... | created_at          |
----------------------------------------------------
1  | [2,6,5] | 12      | ... | 2018-07-28 00:00:00 |
----------------------------------------------------

如您所见,我的模块以数组形式保存。因此,在那之后我该如何制作教义(使用Symfony)来获取我的模块

1 个答案:

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

当您按教义持久地订购对象时...教义会处理并创建物品