Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 坚持一人关系主义_Php_Doctrine_Doctrine Orm_Persistence_One To One - Fatal编程技术网

Php 坚持一人关系主义

Php 坚持一人关系主义,php,doctrine,doctrine-orm,persistence,one-to-one,Php,Doctrine,Doctrine Orm,Persistence,One To One,我有一个问题与坚持一个一元论的关系有关 概述: 我有两个实体:UserEntity(概要文件)和UserDataEntity(用户数据)。每个UserEntity都有UserDataEntity(但不是必需的),但每个UserDataEntity都必须有引用到的UserEntity 当我尝试持久化UserEntity时,我收到一个错误: SQLSTATE[23502]:非空违规:7 BŁĄD:pusta wartośćw kolumnie“id”narusza ograniczenie wyma

我有一个问题与坚持一个一元论的关系有关

概述:

我有两个实体:UserEntity(概要文件)和UserDataEntity(用户数据)。每个UserEntity都有UserDataEntity(但不是必需的),但每个UserDataEntity都必须有引用到的UserEntity

当我尝试持久化UserEntity时,我收到一个错误:

SQLSTATE[23502]:非空违规:7 BŁĄD:pusta wartośćw kolumnie“id”narusza ograniczenie wymaganej wartości 这意味着用户表中的列“id”不能为null。这很混乱,因为此列已分配自动生成的主键策略

下面是我的实体:

/**
 * A user.
 * 
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class UserEntity extends AbstractEntity
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer");
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     */
    protected $name;

    /**
     * @ORM\OneToOne(targetEntity="ModuleAdmin\Entity\TradesmanDataEntity", inversedBy="parent", cascade={"persist"})
     * @ORM\JoinColumn(name="id", referencedColumnName="data_id")
     */
    protected $data;

    public function setData(UserDataEntity $data)
    {
        $this->data = $data;
    }
}
和用户的数据实体:

/**
 * A user's data.
 * 
 * @ORM\Entity
 * @ORM\Table(name="users_data")
 */
class UserDataEntity extends AbstractEntity
{
    /**
     * @ORM\Id
     * @ORM\OneToOne(targetEntity="ModuleAdmin\Entity\TradesmanEntity", mappedBy="parent", cascade={"persist"})
     * @ORM\JoinColumn(name="data_id", referencedColumnName="id")
     */
    protected $parent;

    /**
     * @ORM\Column(type="string")
     */
    protected $email;

    /**
     * @ORM\Column(type="string")
     */
    protected $phone;

    /**
     * Provides creation for new empty entity.
     * 
     */
    public function __construct(TradesmanEntity $parent)
    {
        $this->parent = $parent;
    }
}
我的PostgreSQL数据库架构如下所示:

CREATE TABLE users
(
  id serial NOT NULL,
  name character varying(255) NOT NULL,
  CONSTRAINT users_pkey PRIMARY KEY (id )
);


CREATE TABLE users_data
(
  data_id integer NOT NULL,
  email character varying(255) NOT NULL,
  phone character varying NOT NULL,
  CONSTRAINT users_data_pkey PRIMARY KEY (data_id ),
  CONSTRAINT users_data_data_id_fkey FOREIGN KEY (data_id)
      REFERENCES users (id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE CASCADE
);

我希望保留数据库级别的约束,而不是ORM。

“自动生成的主键策略已分配”?我在您的数据库模式中没有看到,这是PostgreSQL模式,SERIAL表示(在UserEntity中),默认值是与表相关的序列中的下一个值(相当于MySQL中的自动增量)。我刚刚编辑了我的问题,并提到,该模式是PostgreSQL。啊,我明白了。添加
notnull
then的原因是什么?notnull在数据库级别以正确的方式保持数据库集成。正如我提到的,没有UserEntity就不会有UserDataEntity。此外,创建主键时需要NOT NULL(对于UserEntity,它是用户的ID;对于UserDataEntry,列数据\u ID是整数。NOT NULL指的是用户的ID-事实上是必需的)。具有
serial
已经具有
NOT NULL
的含义。所以我问你为什么要加上它。顺便说一句,错误来自数据库服务器层。您可能应该转储doctrine运行的实际查询,看看它是否有问题。