学说问题(映射不一致)

iLi*_*ast 4 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.
Run Code Online (Sandbox Code Playgroud)

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

在Province.php

/**
  * @ORM\OneToMany(targetEntity="School", mappedBy="provinceId")
 */ 
private $schools;
Run Code Online (Sandbox Code Playgroud)

在我的Schools.php

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

而对于第二个错误......

School.php

/**
 * @ORM\OneToMany(targetEntity="Grade", mappedBy="school_id")
 */
private $grades;
Run Code Online (Sandbox Code Playgroud)

和Grade.php

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

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

谢谢你的帮助!

Tho*_*ley 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;
Run Code Online (Sandbox Code Playgroud)

我想这是在这里扔东西的类型.你看,映射的目的是让你可以像对象一样对待这些东西,而不必担心它们在数据库中是如何持久化/连接的.具体而言,在您的情况下,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;
Run Code Online (Sandbox Code Playgroud)

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