OneToMany ManyToOne DoctrineORM错误

时间:2016-05-29 16:55:19

标签: php symfony orm doctrine-orm

我是PHP的新手。我开始使用symfony,但我有这个问题

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */

class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
 * @param \Doctrine\Common\Collections\Collection $carList
 * @ORM\OneToMany(targetEntity="AppBundle\CarBundle\Entity\Car", mappedBy="name", cascade={"persist"})
 */
     private $carList;

//getters and setters

}

     *
 * @ORM\Entity(repositoryClass="AppBundle\CarBundle\Repository\Entity\CarRepository")
 * @ORM\Table(name="car")
 */
class Car
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     *
     *
     */
    protected $id;



    /**
 * @ORM\Column(type="string", length=100)
 * @ORM\ManyToOne(targetEntity="AppBundle\UserBundle\Entity\User" , inversedBy="carList")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")

 */     
    private $name;

//getters and setters

}

stacktrace说:

  

Symfony \ Component \ Debug \ Exception \ ContextErrorException:注意:未定义的索引:名称       在n / a

当我运行php bin / console doctrine:schema:validate

  

[Mapping] FAIL - 实体类' AppBundle \ UserBundle \ Entity \ User'   映射无效:   *关联AppBundle \ UserBundle \ Entity \ User#carList指的是拥有方字段AppBundle \ CarBundle \ Entity \ Car#name不是   定义为关联,但作为字段。   *关联AppBundle \ UserBundle \ Entity \ User#carList指的是拥有方字段Appbundle \ CarBundle \ Entity \ Car#name   不存在

我不知道最新情况,你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

您正在将关联名称与列名混合。当您创建关联时,您不需要手动添加该关联的列,doctrine将为您解决这个问题。

这段代码(在Car类中)说$ name字段是car表中的普通文本列,当然这是错误的 * @ORM\Column(name="name",type="string", length=100)

您所描述的是一个用户可以拥有多辆汽车,而且许多汽车可以属于一个用户。然后我会打电话给协会老板和汽车,但你当然可以随意给他们打电话。请注意,您无需定义连接列。

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */

class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @param \Doctrine\Common\Collections\Collection $cars
     * @ORM\OneToMany(targetEntity="AppBundle\CarBundle\Entity\Car", mappedBy="owner", cascade={"persist"})
     */
    private $cars;

    public function __construct()
    {
       $this->cars = new \Doctrine\Common\Collections\ArrayCollection();
    }

    //getters and setters
}

/**
 *
 * @ORM\Entity(repositoryClass="AppBundle\CarBundle\Repository\Entity\CarRepository")
 * @ORM\Table(name="car")
 */
class Car
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\UserBundle\Entity\User" , inversedBy="cars")
     */     
    private $owner;

//getters and setters

}

了解详情:Doctrine association mapping

希望有道理:)