Jeremy
Jeremy

Reputation: 554

Missing value for primary key id Doctrine Symfony2

I'm working on a join between two entities in doctrine on symphony 2.8.2. I keep getting "Missing value for primary key id"

Heres the id annotation for the missing id.

 /**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

Here are my joins:

/**
 * @ORM\OneToOne(targetEntity="FYP\BaseDesignBundle\Entity\SessionDesign", inversedBy="user")
 * @ORM\JoinColumn(name="fcid", referencedColumnName="id")
 */
private $sessionDesign;


/**
 * @ORM\OneToOne(targetEntity="FYP\UserBundle\Entity\User", inversedBy="sessionDesign")
 * @ORM\JoinColumn(name="id", referencedColumnName="fcid")
 */
private $user;

Upvotes: 8

Views: 19749

Answers (1)

chalasr
chalasr

Reputation: 13167

It's a mistake coming from the joinColumn name of your association.

Change your mapping to :

/**
 * @ORM\OneToOne(targetEntity="FYP\UserBundle\Entity\User", inversedBy="sessionDesign")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

Note: That is the default configuration, also the line can be removed because it's useless.

EDIT

I was right without pointing the real problem.
You are getting this error because you are trying to use a column that is not a primary key as the referencedColumnName of your joinColumn

The following:

* @ORM\JoinColumn(name="id", referencedColumnName="fcid")

Should be:

* @ORM\JoinColumn(name="user_id", referencedColumnName="id")

From this similar question at the owner's answer (related to the exactly same error):

It is not possible to use join columns pointing to non-primary keys. Doctrine will think these are the primary keys and create lazy-loading proxies with the data, which can lead to unexpected results. Doctrine can for performance reasons not validate the correctness of this settings at runtime but only through the Validate Schema command.

Similar question Is it possible to reference a column other than 'id' for a JoinColumn?

Upvotes: 11

Related Questions