学说:指拥有不存在的侧场(再次)
Posted
技术标签:
【中文标题】学说:指拥有不存在的侧场(再次)【英文标题】:doctrine: refers to owning side field which does not exist (again) 【发布时间】:2016-07-12 20:36:33 【问题描述】:我无法理解它。我或多或少地复制了教程,但分析器抛出了两个错误:
AppBundle\Entity\Brand 关联 AppBundle\Entity\Brand#devices 指拥有方字段 AppBundle\Entity\Device#brands 哪个 不存在。
AppBundle\Entity\Device 关联 AppBundle\Entity\Device#brand 指逆边字段 AppBundle\Entity\Brand#brands 不存在。
class Brand
/**
* @var int
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
/**
* @ORM\OneToMany(targetEntity="Device", mappedBy="brands")
*/
private $devices;
和
class Device
/**
* @var int
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
/**
* @ORM\ManyToOne(targetEntity="Brand", inversedBy="devices")
* @ORM\JoinColumn(name="brand_id", referencedColumnName="id", nullable=true)
*/
private $brand;
【问题讨论】:
【参考方案1】:尚未测试,但根据文档,它应该看起来像这样
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional
class Brand
/**
* @var int
* @ORM\Column(name="brand_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
/**
* @ORM\OneToMany(targetEntity="Device", mappedBy="brand")
*/
private $devices;
和
class Device
/**
* @var int
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
/**
* @ORM\ManyToOne(targetEntity="Brand", inversedBy="devices")
* @ORM\JoinColumn(name="brand_id", referencedColumnName="id", nullable=true)
*/
private $brand;
【讨论】:
嗯嗯!你是对的!所以 inversedBy 和 mappedBy 值不是表名? 不,这是内部教义,看看这个***.com/a/34583366/3275814【参考方案2】:将关联定义为私有不起作用,但一旦我将它们更改为受保护,它就起作用了。尽管需要注意的最重要的事情是类中定义的关联应该在 inversedby 和 mappedby 属性中使用,而不是类名或表名。这是一个有用的帖子:What is the difference between inversedBy and mappedBy?
【讨论】:
以上是关于学说:指拥有不存在的侧场(再次)的主要内容,如果未能解决你的问题,请参考以下文章