【发布时间】:2018-04-09 07:10:49
【问题描述】:
我在 2 个实体之间的关系是 OneToOne 关系。
1) 用户实体:
<?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 实体:
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;
}
}
我的用户存储库如下所示:
class UserRepository extends ServiceEntityRepository
{
public function index() {
return $this->createQueryBuilder('u')
->innerJoin('u.userContact', 'uc')
->getQuery()
->execute();
}
}
控制器看起来像这样:
public function index()
{
$users = $em->getRepository('App:User')->index();
}
它会抛出这样的错误:
Missing value for primary key id on App\Entity\UserContact
【问题讨论】:
-
发布完整的
User和UserContact实体 -
问题已编辑。请检查
-
我不确定,但我相信
OneToOne期望在referencedColumnName(在您的情况下为user_id)中设置的列是主键。尝试将@ORM\Id()中的UserContact移动(和/或添加)user_id -
您的意思是在 user_id 列上添加此 @ORM\Id() 。 ? user_id 是 users 表的 ForeignKey。它将不起作用,因为 @ORM\Id() 在多个列上使用 1 作为其主键,另一列用于 user_id。
-
用户实体 id 是主要的,userContact 实体上的 user_id 是用户表的 FK。
标签: symfony doctrine-orm symfony-2.1 symfony-2.3