2012-02-07 22 views
6

Derlemeden ComponentSlot'a bir ilişkim var. OneToMany ilişkisidir.Doctrine/Symfony2 OneToMany foreign_id tasarrufu NULL olarak

// Assembly 

/** 
* @ORM\OneToMany(targetEntity="ComponentSlot", mappedBy="assembly", cascade={"persist"}) 
* @Assert\Valid 
*/ 
protected $componentSlots; 

// ComponentSlot 

/** 
* @ORM\ManyToOne(targetEntity="Assembly", inversedBy="componentSlots") 
*/ 
protected $assembly; 

Veritabanında oluşturulan şema kesinlikle iyi. Doğru sütunlar, doğru indeksler ve ilişkiler.

Symfony2 formu AssemblyType, ComponentSlotType koleksiyonuna sahiptir. Birden çok ComponentSlot çocuğu ekleyebiliyorum. Kalıcı olarak, Assembly ve ComponentSlot çocukların hepsi mükemmel bir şekilde kaydedilir, ancak assembly_id bileşen yuvası tablosunda NULL değeridir.

İlişkileri kaydeden önceki bir projede yaptığım kurulumu kopyaladım, tamamen güldüm. Kaskad sürekliliği, Assembly'nin komponentSlot alanları üzerinde ayarlanmıştır ve OneToMany ile olan geçmiş deneyimlerim, burada özel bir şey yapmak zorunda olmadığımdan, bununla ilgilenilmesi gerektiğidir.

Herhangi işaretçiler mutluluk duyacağız :)

+0

İlişkiyi nasıl kurarsınız? Hangi yöntemleri kullanıyorsunuz? – greg0ire

+0

Dediğim gibi, zaten (aynı şekilde açık değil) bir şekilde kurulan OneToMany ilişkileri ile çalışan bir projem var. Bu projede ebeveynin 'addLink (Link $ link)' vardır ve sadece '$ this-> link [] = $ link' olarak adlandırılır. Gerçekten de, http://symfony.com/doc/2.0/book/doctrine.html adresindeki belgeler, ebeveyn ve çocuk koleksiyonu öğelerinin bağlantısının otomatik olduğunu doğrulamaktadır. Bu otomatik olmalı, benim önceki proje, belgeleme ve doktrin gerçek şu ki: üretmek: varlıklar otomatik oluşturulma eki yönteminde bu ilişkiyi kurmaz benim modelim tamam olduğunu ve başka bir şey – PorridgeBear

+0

başka bir şey uyandırdığını düşündüm. koleksiyon form alanındaki by_reference, false olarak ayarlanmak yerine atlandı. Bu, çocuklar için saklanan kimliği değiştirmedi. – PorridgeBear

cevap

4

önceki ayarlarınızı kontrol edin. Şunlara benzer bir şeyden şüphelendiniz:

// Assembly 
public function addComponentSlot($componentSlot) 
{ 
    $this->componentSlots[] = $componentSlot; 

    $componentSlot->setAssembly($this); // Probably left this out when you copied? 
} 
+0

Hayır, ekleyerek hiçbir şey değişmez. Ben de bunu Symfony2'nin istekte kullandığı setComponentSlotlar üzerinde denedim -> bindRequest nesneyi ayarlamak ve bu da işe yaramıyor. – PorridgeBear

İlgili konular