User
には、1つのPackage
が関連付けられています。多くのユーザーが同じパッケージを参照できます。 User
は、Package
が定義されていないと存在できません。 User
はリレーションを所有する必要があります。関係は双方向であるため、Package
にはゼロ以上のユーザーが含まれます。
これらの要件により、Doctrine 2.のManyToOne
のUser
およびOneToMany
関係のPackage
関係が発生します。ただし、user
テーブル(外部キー)のpackage_id
は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;
}
EDIT:解決しました。注意してくださいこれは間違っている(二重引用符に注意してください):
@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable="false")
これは正しいですが:
@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
ManyToOneリレーションでJoinColumnアノテーションを使用します。
/**
* @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
* @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
*/
private $package;
ManyToOne自体は特定の列に関連しないため、nullにすることはできません。一方、JoinColumnはデータベース内の列を識別します。したがって、null可能または一意のような「通常の」属性を使用できます。