I have been using annotations in a Symfony application to define ORM mappings with Doctrine.
I want to change an existing, string-holding property called "author" so that it now instead acts as a reference to a User entity. I change the annotations above my property's definition from this:
/**
* @var string
*
* @ORM\Column(name="author", type="string", length=255)
*/
... to this:
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="FOS\UserBundle\Model\User", cascade={"all"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
Now the problem: When I run doctrine:migrations:diff
in order to generate a migration, I get a message saying "No changes detected in your mapping information."
Similarly, when I run doctrine:schema:update
, I get a message saying that there is "Nothing to update - your database is already in sync with the current entity metadata."
===
Update: After dropping the database and re-running an installation, I now get the following error message when running doctrine:migrations:diff
:
[Doctrine\ORM\ORMException]
Column name id
referenced for relation from AppBundle\Entity\Post towards FOS\UserBundle\Model\User does not exist.
This comes even as DESC users
returns the following:
mysql> DESC users;
+-----------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(180) | NO | | NULL | |
...
... so I'm a bit farther than where I originally was, but my basic question still applies: What information or action is still needed in order to get Doctrine to happily build a ManyToOne mapping on this column?
===
Additional edit: Thanks to the answer from goto, I peeked around and saw that our application already had an entity extending the FOS UserBundle entity. So I changed my annotations to be as follows:
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", cascade={"all"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
... and everything worked.
user_id
column? it seems to me you already did the changes in database so doctrine doens't see any changes. – goto