0

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

这是控制器中的代码:

    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 返回的错误:

关联字段“AppBundle\Entity\OrderList#$numProvider”的“AppBundle\Entity\Provider”类型的预期值改为“整数”。

请帮我解决这个错误。

4

2 回答 2

2

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

至少有两种解决方案:

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

如果您想了解更多信息,可以查看以下文档:参考代理关系

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');
}
于 2017-10-29T15:39:55.817 回答
1

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

于 2017-10-29T15:42:06.753 回答