【问题标题】:Missing value for primary key id on App\Entity symfonyApp\Entity symfony 上的主键 ID 缺失值
【发布时间】: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;
    }

}
  1. 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

【问题讨论】:

  • 发布完整的 UserUserContact 实体
  • 问题已编辑。请检查
  • 我不确定,但我相信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


【解决方案1】:

在您的关联中,拥有方是User,反方是UserContact。反面必须使用mappedBy,而不是inversedBy。因此,您在 User 实体中对 $user 属性的注释必须是这样的:

/** * @ORM\OneToOne(targetEntity="User", mappedBy="UserContact") */ private $user;

https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/unitofwork-associations.html

【讨论】:

  • 拥有方是什么意思?
  • 原则关系中的拥有方是拥有外键的一方。请参阅我在回答中提供的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2018-05-03
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多