坚持OneToOne关系学说

时间:2012-11-11 11:50:12

标签: php doctrine doctrine-orm persistence one-to-one

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

概述:

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

当我试图坚持UserEntity时,我收到错误:

  

SQLSTATE [23502]:非空违规:7BŁĄD:pustawartośćwkolumnie“id”narusza ograniczeniewymaganejwartości   这意味着User表中的列“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。

0 个答案:

没有答案