symfony - 学说2映射覆盖从MappedSuperclass继承的inversedBy字段

标签 symfony orm doctrine-orm mapping

另一个问题。我有一个抽象的 BaseLog 实体,它保持与我的用户的关联。
此外,我有 2 个扩展 BaseLog 的实体(FooLog 和 BarLog)。此外,我有我的用户实体,它应该拥有两个与 Log 的关联。一种用于 FooLog,一种用于 BarLog。这是我的问题。我收到错误消息,因为我不知道如何在扩展实体时覆盖 BaseLog 的 inversedBy 字段。请你帮助我好吗。

因为我觉得我的解释不是很好,这里是我的实体的设置。

BaseLog

/** @ORM\MappedSuperclass */
abstract class BaseLog {
  /**
   * @ORM\ManyToOne(targetEntity="User", inversedBy="logs")
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
   * })
   */
  private $user;
}

FooLog
/** @ORM\Entity */
class FooLog extends BaseLog {
  // Some additional fields
}

BarLog
/** @ORM\Entity */
class BarLog extends BaseLog {
  // Some additional fields
}

用户
/** @ORM\Entity */
class User {
  /**
   * @ORM\OneToMany(targetEntity="FooLog", mappedBy="user", cascade={"persist"})
   */
  private $fooLogs;

  /**
   * @ORM\OneToMany(targetEntity="BarLog", mappedBy="user", cascade={"persist"})
   */
  private $barLogs;
}

我如何在 FooLog 和 BarLog 中覆盖 BaseLog 的 inversedBy。

我在这个设置上遇到了几个映射错误:
基本日志
  • 基本日志:关联 BaseLog#user 指的是不存在的反面字段 User#logs。
  • FooLog:关联 FooLog#user 指的是不存在的反面字段 User#logs。
  • 条形日志:关联 BarLog#user 指的是不存在的反面字段 User#logs。
  • 用户:映射 User#fooLogs 和 FooLog#user 彼此不一致。
  • 用户:映射 User#barLogs 和 BarLog#user 彼此不一致。

  • 请帮我整理我的映射。

    最佳答案

    我对单一继承有类似的问题。我通过在两个实体类(父类和继承类)中定义相同的关联但名称不同来解决这个问题。在你的情况下,你可以试试这个:

        /** @ORM\Entity */
    class FooLog extends BaseLog {
      /**
       * @ORM\ManyToOne(targetEntity="User", inversedBy="foologs")
       * @ORM\JoinColumns({
       *   @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
       * })
       */
       private $user;
    }
    

    在 BarLog 类中:
    /** @ORM\Entity */
        class BarLog extends BaseLog {
          /**
           * @ORM\ManyToOne(targetEntity="User", inversedBy="barlogs")
           * @ORM\JoinColumns({
           *   @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
           * })
           */
           private $bar_user;
        }
    

    注意不同的名称($bar_user)。
    您还必须在用户实体中定义 foologs 和 barlogs 属性。这消除了学说验证错误。

    关于symfony - 学说2映射覆盖从MappedSuperclass继承的inversedBy字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13832517/

    相关文章:

    symfony - 我可以在编译器阶段访问语义配置吗?

    c# - POCO生成工具

    mysql - 使用查询生成器进行复杂的连接查询

    php - FOSUserBundle 编辑用户无法正常工作

    php - Symfony 2 中的集合主题,每个级别的嵌套形式都不同

    php - 如何使用 symfony 获取完整的帖子正文?

    c++ - 如何使用复合键删除 SQLite ORM 中的条目

    python - 如何使用 django ORM 在外键字段上连接两个表?

    php - Zend 3 + Doctrine 2 创建表格?

    doctrine-orm - Symfony 表单、标签无需翻译