代码之家  ›  专栏  ›  技术社区  ›  Mayor of the Plattenbaus

让条令对注释更改采取行动

  •  0
  • Mayor of the Plattenbaus  · 技术社区  · 8 年前

    我一直在使用Symfony应用程序中的注释来定义ORM映射和条令。

    我想更改一个名为“author”的现有字符串属性,以便它现在可以作为对用户实体的引用。我根据以下内容更改属性定义上方的注释:

    /**
     * @var string
     *
     * @ORM\Column(name="author", type="string", length=255)
     */
    

    ... 对此:

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="FOS\UserBundle\Model\User", cascade={"all"})
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    

    现在的问题是:当我跑步的时候 doctrine:migrations:diff 为了生成迁移,我收到一条消息:“在映射信息中未检测到任何更改。”

    同样,当我跑步时 doctrine:schema:update ,我收到一条消息,说“无需更新-您的数据库已与当前实体元数据同步。”

    ===

    更新:删除数据库并重新运行安装后,我现在在运行时收到以下错误消息 条令:迁移:差异 :

    [条令\ORM\or例外] 列名称 id 从AppBundle\Entity\Post到FOS\UserBundle\Model\User的关系引用不存在。

    这甚至是 DESC users 返回以下内容:

    mysql> DESC users;
    +-----------------------+---------------+------+-----+---------+----------------+
    | Field                 | Type          | Null | Key | Default | Extra          |
    +-----------------------+---------------+------+-----+---------+----------------+
    | id                    | int(11)       | NO   | PRI | NULL    | auto_increment |
    | username              | varchar(180)  | NO   |     | NULL    |                |
    ...
    

    ... 所以我比我原来的位置要远一点,但我的基本问题仍然适用: 为了让条令在本专栏上愉快地构建多通映射,还需要什么信息或行动?

    ===

    附加编辑:多亏了goto的回答,我四处看了看,发现我们的应用程序已经有了一个扩展FOS UserBundle实体的实体。因此,我将注释更改为:

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", cascade={"all"})
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    

    ... 一切都很顺利。

    1 回复  |  直到 8 年前
        1
  •  1
  •   goto    8 年前

    您忘记按照FOS用户文档中的描述创建自己的实体:

    https://symfony.com/doc/current/bundles/FOSUserBundle/index.html#step-3-create-your-user-class

    然后您必须将其映射到您的实体

    @ORM\ManyToOne(targetEntity="YourBundle\Entity\User", cascade={"all"})