Doktrin 2, manyToOne ilişkisinde nullable = false kullanamaz mı?


110

An'ın kendisiyle ilişkili bir tane Uservardır Package. Birçok kullanıcı aynı pakete başvurabilir. tanımlı Userolmadan var olamaz Package. Userilişkiye sahip olmalıdır. İlişki çift yönlüdür, dolayısıyla a'da Packagesıfır veya daha fazla kullanıcı vardır.

Bu gereksinimler, yol ManyToOneİlişki Userve OneToManyilişkisi PackageÖğreti 2'de Ancak package_idolarak usertablo (yabancı tonlu) sağlar nulldeğerleri. Ayarlamayı denedim nullable=falseama komut:

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

nullableİlişkinin bir niteliği olmadığını söylüyor ManyToOne. Neyi kaçırıyorum?

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;

}

DÜZENLEME : çözüldü. lütfen bunun yanlış olduğunu unutmayın (çift tırnak işaretlerine dikkat edin):

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

Bu doğru olsa da:

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

Yanıtlar:


193

ManyToOne ilişkinizde JoinColumn ek açıklamasını kullanın:

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

ManyToOne'ın kendisi, belirli bir sütunla ilgili olmadığı için null yapılabilir olamaz. Öte yandan JoinColumn, veritabanındaki sütunu tanımlar. Böylece, null yapılabilir veya benzersiz gibi "normal" öznitelikleri kullanabilirsiniz!


Teşekkürler, denedim ama maalesef sütun package_idhala Null - Yes, Default - NULL olarak işaretleniyor. Herhangi bir yardım çok takdir edilmektedir.
gremo

5
Boşver, çift alıntı olayı tamamen bozar. Bu nullable="false"yanlış!
gremo

Veritabanını tamamen silmeyi ve yeni oluşturmayı denediniz mi? Veritabanıma biraz önce baktım (yukarıda belirtildiği gibi aynı JoinColumn açıklamasını kullanarak) ve NotNull olarak işaretlendi!
Sgoettschkes

5
Bunun için teşekkürler, bunu neden @ORM\Column(nullable=true)çoktan birini sıfırlanabilir hale getiremediğimi merak ediyordum !
Scott Flack

Doğru seçeneği yapılandırdıysanız ve hala veritabanı sütununuzu yanlış değerde görüyorsanız, Varlık Yöneticisi için meta veri önbelleğini temizlemeyi unutmayın. Symfony'de şu console doctrine:cache:clear-metadatakomutu kullanabilirsiniz
Massimiliano Arione
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.