2

OneToOne Doctrine2 関係の永続化に関連する問題があります。

概要:

UserEntity (プロファイル) と UserDataEntity (ユーザーのデータ) の 2 つのエンティティがあります。各 UserEntity には UserDataEntity がありますが (必須ではありません)、各 UserDataEntity には参照先の UserEntity が必要です。

UserEntity を永続化しようとすると、次のエラーが表示されます。

SQLSTATE[23502]: Not null violation: 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ではなく、データベースレベルで制約を維持したいと思います。

4

0 に答える 0