My relation between 2 entities is a OneToOne relation.
1) User Entity:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var $userContact
*
* @ORM\OneToOne(targetEntity="UserContact" , inversedBy="User")
* @ORM\JoinColumn(name="id", referencedColumnName="user_id", nullable=false)
**/
private $userContact;
/**
* @ORM\Column(type="string", length=255)
*/
private $last_name;
public function getId()
{
return $this->id;
}
public function getLastName(): ?string
{
return $this->last_name;
}
public function setLastName(string $last_name): self
{
$this->last_name = $last_name;
return $this;
}
}
- UserContact Entity:
class UserContact
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="integer")
*/
private $user_id;
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="UserContact")
*/
private $user;
/**
* @ORM\Column(type="string", length=255)
*/
private $mobile_number;
public function getId()
{
return $this->id;
}
public function getUserId(): ?int
{
return $this->user_id;
}
public function setUserId(int $user_id): self
{
$this->user_id = $user_id;
return $this;
}
public function getMobileNumber(): ?string
{
return $this->mobile_number;
}
public function setMobileNumber(string $mobile_number): self
{
$this->mobile_number = $mobile_number;
return $this;
}
}
My User Repository looks like this:
class UserRepository extends ServiceEntityRepository
{
public function index() {
return $this->createQueryBuilder('u')
->innerJoin('u.userContact', 'uc')
->getQuery()
->execute();
}
}
And the controller looks like this:
public function index()
{
$users = $em->getRepository('App:User')->index();
}
It's throwing an error like this one:
Missing value for primary key id on App\Entity\UserContact
In your association, the owning side is
Userand the inverse side isUserContact. You must usemappedByfor the inverse side insteadinversedBy. So your annotation for the$userattribute in User entity must be this:/** * @ORM\OneToOne(targetEntity="User", mappedBy="UserContact") */ private $user;https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/unitofwork-associations.html