插入 symfony 3 table

Insert into a symfony 3 table

我需要在数据库中做一个简单的插入,

控制器中的代码如下:

    public function verifCreateOrder(Request $req){
        $store = 1;
        $provider =2;
        $creation =  $creation_start = $req->get('creation_start');
        $delivery = $creation_start = $req->get('creation_start');

        $em = $this->getDoctrine()->getManager();

        $order = new OrderList();
        $order->setNumStore($store);
        $order->setNumProvider($provider);
        $order->setCreation($creation);
        $order->setDelivery($delivery);

        $em->persist($order);
        $em->flush();
        die();
        return $this->redirectToRoute('search.view');
    }

OrderList实体代码:

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

    /**
     * @var int
     *
     * @ORM\ManyToOne(targetEntity="Provider")
     * @ORM\JoinColumn(name="num_provider", referencedColumnName="id")
     */
    private $numProvider;

    /**
     * @var int
     *
     * @ORM\ManyToOne(targetEntity="Store")
     * @ORM\JoinColumn(name="num_store", referencedColumnName="id")
     */
    private $numStore;

    /**
     * @return int
     */
    public function getNumStore()
    {
        return $this->numStore;
    }

    /**
     * @param int $numStore
     */
    public function setNumStore($numStore)
    {
        $this->numStore = $numStore;
    }

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="creation", type="date")
     */
    private $creation;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="delivery", type="date")
     */
    private $delivery;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="last_update", type="date", nullable=true)
     */
    private $lastUpdate;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="emission", type="date", nullable=true)
     */
    private $emission;

    /**
     * @var int
     *
     * @ORM\Column(name="reduction_1", type="integer", nullable=true)
     */
    private $reduction1;

    /**
     * @var int
     *
     * @ORM\Column(name="reduction_2", type="integer", nullable=true)
     */
    private $reduction2;

    /**
     * @var string
     *
     * @ORM\Column(name="comment", type="string", nullable=true, length=255)
     */
    private $comment;

这是 symfony 返回的错误:

Expected value of type "AppBundle\Entity\Provider" for association field "AppBundle\Entity\OrderList#$numProvider", got "integer" instead.

请帮我解决这个错误。

您混淆了 Doctrine relation 和数据库 foreign key 的概念(它们非常接近,但不相同)。问题是您不能将相关实体标识符视为 Doctrine 中的相关实体。您需要传递整个相关实体,而不仅仅是 foreign key

至少有两种解法:

  1. 不是传递 store (1) 的标识符和 provider (2) 的标识符,而是首先从数据库 ($em->find(...)) 中检索此实体。
  2. 您可以使用 getReference 方法来欺骗学说,那应该 return 您是具有 id($em->getReference('Path\To\Store', 1$em->getReference('Path\To\Provider', 2)的所需对象的代理。

如果您想了解更多信息,可以查看这些文档:reference proxies and relations

public function verifyCreateOrder(Request $req){
    $storeId = 1;
    $providerId = 2;
    $creation =  $creation_start = $req->get('creation_start');
    $delivery = $creation_start = $req->get('creation_start');

    $em = $this->getDoctrine()->getManager();
    // getting references
    $store = $em->getReference(Store::class, $storeId);
    $provider = $em->getReference(Provider::class, $providerId);

    $order = new OrderList();
    $order->setNumStore($store);
    $order->setNumProvider($provider);
    $order->setCreation($creation);
    $order->setDelivery($delivery);

    $em->persist($order);
    $em->flush();
    die();
    return $this->redirectToRoute('search.view');
}

我也是 php 的新手,但是,您将 $provider 设置为整数 = 2,并且您的关系期望对象 Provider $provider。