学说问题(映射不一致)

时间:2013-11-08 21:47:10

标签: php symfony doctrine-orm

我正忙于Symfony的一个项目,我只是检查了分析器选项卡,看到2个错误不断弹出 - 它们在下面。

The mappings MyBundle\MainBundle\Entity\School#provinceId and MyBundle\MainBundle\Entity\Province#schools are incosistent with each other.

The association MyBundle\MainBundle\Entity\School#grades refers to the owning side field MyBundle\MainBundle\Entity\Grade#school_id which does not exist.

我得到了更多这些,我不明白为什么? “不存在”是什么意思(看我在那里做了什么)?如果它有用,我的部分代码如下。

在Province.php

/**
  * @ORM\OneToMany(targetEntity="School", mappedBy="provinceId")
 */ 
private $schools;

和我的Schools.php

/**
 * @var integer
 *
 * @ORM\ManyToOne(targetEntity="Province", inversedBy="schools")
 * @ORM\JoinColumn(name="province_id", referencedColumnName="id")
 */
private $provinceId;

第二个错误......

School.php

/**
 * @ORM\OneToMany(targetEntity="Grade", mappedBy="school_id")
 */
private $grades;

和Grade.php

/**
 * @var integer
 *
 * @ORM\ManyToOne(targetEntity="School", inversedBy="grades")
 * @ORM\JoinColumn(name="school_id", referencedColumnName="id")
 */
private $schoolId;

我只是想知道这些错误究竟是什么意思以及为什么这些实体不正确 - 我试着关注学说页面上的文档,但显然我在某个地方出错了!

感谢您的帮助!

1 个答案:

答案 0 :(得分:9)

我没有你的整个配置,所以我只想在这里做一个有根据的猜测......(如果我错了,请原谅我!)

关于第一个,你说映射看起来像这样:

# Province.php
/**
  * @ORM\OneToMany(targetEntity="School", mappedBy="provinceId")
 */ 
private $schools;

# School.php
/**
 * @var integer
 *
 * @ORM\ManyToOne(targetEntity="Province", inversedBy="schools")
 * @ORM\JoinColumn(name="province_id", referencedColumnName="id")
 */
private $provinceId;

我想这是在这里扔东西的类型。你看,映射的目的是让你可以像对象一样对待这些东西,而不必担心它们在数据库中是如何持久化/连接的。具体而言,在您的情况下,School实体不应该有$provinceId类型的成员integer;相反,它应该有$province类型Province

试试这个:

# Province.php
/**
  * @ORM\OneToMany(targetEntity="School", mappedBy="province")
 */ 
private $schools;

# School.php
/**
 * @var Province
 *
 * @ORM\ManyToOne(targetEntity="Province", inversedBy="schools")
 * @ORM\JoinColumn(name="province_id", referencedColumnName="id")
 */
private $province;

(同样,这完全没有经过考验,我只有你所拥有的一部分...但我认为这会让你更接近。)