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注解映射类的字段可以和数据库中的字段不一致吗

SpringMVC:取决于 url 扩展的不一致映射行为

easyexcel导入对象与表头不一致时

MyBatis学习笔记 —— 字段名和属性不一致的情况下,如何处理映射关系

Doctrine实体监听器的行为不一致