1. ホーム
  2. symfony

[解決済み] Doctrine 2 は manyToOne リレーションで nullable=false を使うことはできないのですか?

2022-05-18 04:32:52

質問

An User ある Package を連想させる。多くのユーザーが同じパッケージを参照することができます。 User がなければ成立しない。 Package を定義しました。 User は関係を所有する必要があります。リレーションは双方向なので Package は、その中に0人以上のユーザーを持つ。

これらの要件は、以下のことにつながります。 ManyToOne に対する UserOneToMany 関係 Package ただし、ドクトリン2において package_id において user テーブル(外国人キー)では null の値を設定することができます。私は nullable=false を設定してみましたが、コマンド

 php app/console doctrine:generate:entities DL --path="src" --no-backup

属性がないことを示す nullable という関係で ManyToOne . 何が足りないのでしょうか?

class User
{

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
     */
    private $package;

}

class Package
{

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="package")
     */
    private $users;

}

どのように解決するのですか?

ManyToOneリレーションにJoinColumnアノテーションを使用します。

/**
 * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
 * @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
 */
private $package;

ManyToOne自体は特定のカラムに関連しないので、nullableにすることはできません。一方、JoinColumnはデータベース内のカラムを特定します。したがって、nullableやuniqueのような"normal"属性を使用することができます!