Doctrine orm 条令2当设置多通关系时,类别id始终为空

Doctrine orm 条令2当设置多通关系时,类别id始终为空,doctrine-orm,Doctrine Orm,当我插入新条目时,如果我设置了多通关系“类别”,我将无法填写“类别ID”字段,为什么 这是具有以下关系的实体: <?php namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; /** * Item * * @ORM\Table(name="item") * @ORM\Entity */ class Item extends Base { /** * @ORM\ManyToOne(ta

当我插入新条目时,如果我设置了多通关系“类别”,我将无法填写“类别ID”字段,为什么

这是具有以下关系的实体:

<?php

namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Item
 *
 * @ORM\Table(name="item")
 * @ORM\Entity
 */
class Item extends Base
{
    /**
     * @ORM\ManyToOne(targetEntity="Category")
     */
    private $category;


    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    public $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=40, nullable=false)
     */
    public $name;

    /**
     * @var integer
     *
     * @ORM\Column(name="category_id", type="integer", nullable=true)
     */
    public $categoryId;

}

怎么了?你做错了!对于条令,您不处理category_id列(以及类似的列),而是处理关系。条令将负责专栏

您必须阅读文档,但正确的方法是:

$category = new Category() ;
$category->setName("Food") ;

$item = new Item() ;
$item->setName("Pizza") ;
$item->setCategory($category) ;

$em->persist($item) ;
$em->flush() ;
这是100%正确的做事方式,你甚至不需要坚持新创建的类别(条令会为你做到这一点)。但手动设置category_id列是完全错误的做法

还有一点:
不要试图对Doctrine2进行动态记录。当我从D1切换到D2时,我想做同样的事情,但最后,我认为这是浪费时间。看起来您正在尝试创建自己的框架;不要那样做。学习Symfony2;这不容易,但值得花时间。

谢谢你的帮助,我的问题解决了。你能告诉我为什么你认为ActiveRecord是浪费时间的吗?DataMapper是做什么的?对于初学者来说,你不需要扩展一些BaseRecord类。注释非常酷,datamapper模式迫使您考虑对象,而不是列。如果您首先开始编写单元测试,您可以更容易地学习OOP,您将惊讶于您的代码将变得多么干净。如果这还不够好的解释,坚持权威的观点;周围最好的php人决定使用DM而不是AR。
$item = new \Application\Entity\Item();
$item->name = 'Computer';
$item->categoryId = '12';
$this->em->persist($item);
$this->em->flush();
$category = new Category() ;
$category->setName("Food") ;

$item = new Item() ;
$item->setName("Pizza") ;
$item->setCategory($category) ;

$em->persist($item) ;
$em->flush() ;