Symfony - 映射彼此不一致
Posted
技术标签:
【中文标题】Symfony - 映射彼此不一致【英文标题】:Symfony - The mappings are inconsistent with each other 【发布时间】:2016-01-26 10:30:41 【问题描述】:我有 2 个实体,用户和关注者。
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseUser
/**
* @ORM\OneToMany(targetEntity="Follower", mappedBy="user")
*/
protected $followers;
/**
* @ORM\OneToMany(targetEntity="Follower", mappedBy="follower")
*/
protected $followings;
/**
* @ORM\Entity
* @ORM\Table(name="follows")
*/
class Follower
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
*/
protected $user;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
*/
protected $follower;
用户有关注者 ($followers) 和关注者 ($followings)。
我不知道为什么,但我的开发分析器说:
映射 AppBundle\Entity\User#followings 和 AppBundle\Entity\Follower#follower相互不一致。
映射 AppBundle\Entity\Follower#follower 和 AppBundle\Entity\User#followers 不一致。
为什么它们不一致,应该这样做?
【问题讨论】:
我认为这是完全错误的架构...我想最好创建实体user
和实体follow
,并在follow
中使用who
作为user.id
和作为@987654327 的人@...我相信它会更好,更透明...您可以轻松加入表格以接收关注者和关注者...
【参考方案1】:
在追随者实体中,替换为:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
*/
protected $follower;
与:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followings")
*/
protected $follower;
您可以使用命令 dictionary:schema:validate 检查当前映射是否存在有效的正向和反向映射。
php 应用程序/控制台原则:schema:validate
希望有帮助
【讨论】:
对我来说是php bin/console doctrine:schema:validate
嗨@DanChaltiel。感谢您的贡献。您指的是框架版本 3 的文件夹结构。这是关于 v2 的旧答案。【参考方案2】:
您应该用以下内容替换关注者:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
*/
protected $follower;
但我认为在用户实体上使用多对多关联会更好。你可以试试这样的:
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseUser
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="followings")
*/
private $followers;
/**
* @ORM\ManyToMany(targetEntity="User", inversedBy="followers")
* @ORM\JoinTable(name="follows",
* joinColumns=@ORM\JoinColumn(name="following_id", referencedColumnName="id"),
* inverseJoinColumns=@ORM\JoinColumn(name="follower_id", referencedColumnName="id")
* )
*/
private $followings;
【讨论】:
以上是关于Symfony - 映射彼此不一致的主要内容,如果未能解决你的问题,请参考以下文章
java hibernate注解映射类的字段可以和数据库中的字段不一致吗