2

我有一个与坚持 OneToOne Doctrine2 关系有关的问题。

概述:

我有两个实体:UserEntity(配置文件)和 UserDataEntity(用户数据)。每个 UserEntity 都会有 UserDataEntity(但不是必需的),但是每个 UserDataEntity 必须有 UserEntity 所指的。

当我尝试保留 UserEntity 时,我收到一个错误:

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

下面是我的实体:

/**
 * 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。

4

0 回答 0