web-dev-qa-db-ja.com

Doctrine 2は、manyToOne関係でnullable = falseを使用できませんか?

Userには、1つのPackageが関連付けられています。多くのユーザーが同じパッケージを参照できます。 Userは、Packageが定義されていないと存在できません。 Userはリレーションを所有する必要があります。関係は双方向であるため、Packageにはゼロ以上のユーザーが含まれます。

これらの要件により、Doctrine 2.のManyToOneUserおよびOneToMany関係のPackage関係が発生します。ただし、userテーブル(外部キー)のpackage_idnull値を許可します。私は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;

}

EDIT:解決しました。注意してくださいこれは間違っている(二重引用符に注意してください):

 @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable="false")

これは正しいですが:

@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
104
gremo

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

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

ManyToOne自体は特定の列に関連しないため、nullにすることはできません。一方、JoinColumnはデータベース内の列を識別します。したがって、null可能または一意のような「通常の」属性を使用できます。

180
Sgoettschkes