将数据与以一对一的关系插入数据库相结合

时间:2018-01-12 10:15:56

标签: symfony doctrine symfony3.x

我在使用一对一关系将数据插入数据库时​​遇到问题。问题是我无法使用FormBuilder。因为数据来自js格式。 用户从下拉列表中选择状态字段。现在我想将返回的id插入实体订单。

状态实体:

/**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="status", type="string", length=30)
     */
    private $status;

订单实体:

/**
     * @var int
     *
     *  @OneToOne(targetEntity="AppBundle\Entity\Status", fetch="EAGER",cascade={"persist"})
     * @JoinColumn(name="Status_id", referencedColumnName="id")
     */
    private $Status;

服务

$order=new Orders();
        $status=new GlobalStatus();
        $status->getId(1);
        $order->setGlobalStatus($status);

        $this->em->persist($order);
        $this->em->flush();

然后,doctrine尝试将数据添加到Status表中。如果我不尝试创建状态实例,我收到一个错误:( 有人可以告诉我如何添加这些数据吗?

1 个答案:

答案 0 :(得分:0)

状态实体

/**
 * @var int
 *
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(name="id", type="integer")
 */
protected $id;

/**
 * @var Order
 *
 * @ORM\OneToOne(targetEntity="AppBundle\Entity\Order")
 */
protected $order;

订单实体:

/**
 * @var Status
 *
 * @ORM\Column(name="status", type="string", length=30)
 */
protected $status;

您的服务:

class Foo
{
    /**
     * @param Status $status
     */
    public function bar(Status $status)
    {
        if (!$status instanceof Status) {
            return;
        }

        $order = new Order(); //Should be singular
        $order->setStatus($status); //If it's `global` consider use enumType instead

        $this->em->persist($order);
        $this->em->flush();
    }
}

如何让您获取表单数据并将其绑定到Status实体?