2012-03-12 18 views
77

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

これらの要件はnull値を可能にする(すなわち、外部キーである)user表にpackage_idしかし教義2のPackageUserOneToMany関係のためManyToOne関係につながります。私はnullable=falseが、コマンドを設定しようとしました:

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

は関係ManyToOneための属性nullableがないことを言います。 私は行方不明ですか?

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) 

答えて

142

あなたのManyToOne関係にJoinColumnアノテーションを使用します。

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

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

+0

ありがとう、私は試しましたが、残念ながら 'package_id'列にはNullとしてフラグが設定されています - はい、デフォルト - NULLです。どんな助けも大歓迎です。 – gremo

+5

気にしないでください、二重引用符は完全に物を壊します。これは 'nullable =" false "'が間違っています! – gremo

+0

データベースを削除して新規作成しようとしましたか?私はちょうど(上記の同じJoinColumnアノテーションを使用して)私のデータベースを見て、NotNullとしてフラグが立てられています! – Sgoettschkes

関連する問題