我一直在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")
*/
......一切顺利。
答案 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"})