我有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;
}
用户有粉丝($粉丝)及关注($以下)。
我不知道为什么,但我的开发者说:
映射AppBundle \ Entity \ User#followings和 AppBundle \ Entity \ Follower#follower彼此不一致。
映射AppBundle \ Entity \ Follower#follower和 AppBundle \ Entity \ User#followers彼此不一致。
为什么他们不存在而应该这样做?
答案 0 :(得分:10)
在追随者实体中,替换为:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
*/
protected $follower;
使用:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followings")
*/
protected $follower;
您可以使用命令doctrine:schema:validate检查当前映射是否有效的正向和反向映射。
php app / console doctrine:schema:validate
希望这个帮助
答案 1 :(得分:1)
您应该通过以下方式替换粉丝:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
*/
protected $follower;
但我认为在用户实体上使用ManyToMany关联会更好。你可以尝试这样的事情:
/**
* @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;