我正忙于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;
我只是想知道这些错误究竟是什么意思以及为什么这些实体不正确 - 我试着关注学说页面上的文档,但显然我在某个地方出错了!
感谢您的帮助!
答案 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;
(同样,这完全没有经过考验,我只有你所拥有的一部分...但我认为这会让你更接近。)