获取Doctrine以对注释更改进行操作

时间:2018-01-30 07:41:03

标签: php symfony doctrine

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

我想更改一个名为“author”的现有字符串保持属性,以便它现在可以作为对User实体的引用。我更改了我的属性定义之上的注释:

/**
 * @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时,我收到一条消息,说“没有更新 - 您的数据库已经与当前实体元数据同步。”

===

更新:删除数据库并重新运行安装后,我现在在运行doctrine:migrations:diff时收到以下错误消息:

[学说\ ORM \ ORMException]   从AppBundle \ Entity \ Post到FOS \ UserBundle \ Model \ User的关系引用的列名id不存在。

即使DESC users返回以下内容,也会出现这种情况:

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

...所以我比我原来的位置更远,但我的基本问题仍然适用:为了让Doctrine愉快地在此专栏上构建ManyToOne映射,还需要哪些信息或操作?

===

补充编辑:感谢goto的回答,我偷看并看到我们的应用程序已经有一个扩展FOS UserBundle实体的实体。所以我将注释更改为如下:

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

......一切顺利。

1 个答案:

答案 0 :(得分:1)

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

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

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

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