2016-03-24 16 views
2

Oturumunu, Kişi, Katılımcı olması ile, ben katılımcıları kontrol etmek için bir Oturum ve tüm Kişilerin ile bir liste oluşturmak için çalışıyorum .Symfony'nin özel birçok çoğa onay kutusu

s ve session_id s tabloları, participants_id s ve session_id tutar.

aşağıdaki hata alıyorum:

Unable to transform value for property path "person": Expected a Doctrine\Common\Collections\Collection object.

Bir Oturumu oluşturmak ve doğrudan aynı formda katılımcılara kontrol etmek istiyorum.

PersonEntityType

class PersonEntityType extends AbstractType 
{  
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name'); 
    } 
} 

SessionEntityType

class SessionEntityType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('description') 
      ->add('participant', CollectionType::class, 
       array(
        'entry_type' => ParticipantEntityType::class, 
        'by_reference' => false, 
        'allow_add' => true, 
        'allow_delete' => true, 
       ) 
      ); 
    } 
} 

ParticipantEntityType

class ParticipantEntityType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('person', EntityType::class, 
       array(
        'class' => 'AppBundle:PersonEntity', 
        'choice_label' => 'name', 
        'expanded' =>'true', 
        'multiple' => 'true' 
       ) 
      ); 
    } 
} 

PersonEntity

class PersonEntity 
{ 
    private $id; 
    private $name; 

    /** 
    * @ORM\OneToMany(targetEntity="ParticipantEntity", mappedBy="person") 
    */ 
    private $participant; 

    public function __construct() 
    { 
     $this->participant = new ArrayCollection(); 
    } 
} 

SessionEntity

class SessionEntity 
{ 
    private $id; 
    private $description; 

    /** 
    * @ORM\OneToMany(targetEntity="ParticipantEntity", mappedBy="session") 
    */ 
    private $participant; 

    public function __construct() 
    { 
     $this->participant = new ArrayCollection(); 
    } 
} 

ParticipantEntity

class ParticipantEntity 
{ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="PersonEntity", inversedBy="participant") 
    */ 
    private $person; 

    /** 
    * @ORM\ManyToOne(targetEntity="SessionEntity", inversedBy="participant") 
    */ 
    private $session; 

    public function __construct() 
    { 
     $this->person = new ArrayCollection(); 
    } 
} 
Sen olmalıdır
+0

Lütfen, ** PersonEntity ** –

+0

kodunu göster Lütfen, 'SessionEntity' ve' ParticipantEntity' kodlarını göstermelisiniz – Heah

cevap

0

:

namespace AppBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection 

class ParticipantEntity 
{ 
    // ... 

    /** 
    * @var PersonEntity[]|ArrayCollection 
    */ 
    private $person; 

    public function __construct() 
    { 
     $this->person = new ArrayCollection(); 
    } 

    // ... 

Aksi durumda olduğu gibi çalışamaz. SessionEntityType yılında

0

, participant alanı (daha iyi daha anlamlı olacağını olarak participants bunu adlandırmak olurdu) bir CollectionType alandır. Yani, entry_type (ParticipantEntityType) adresinde, hedef Varlık'ın (ParticipantEntity) Koleksiyon özelliğine eşlenen bir alan eklemeniz gerekir.

Bu varlıkta, participant numaralı numaralı numaralı telefon numaranız var. Ben kuvvetle varlıkları revize etmenizi tavsiye

ParticipantEntity

class ParticipantEntity 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="PersonEntity") 
    */ 
    private $persons; 

    public function __construct() 
    { 
     $this->person = new ArrayCollection(); 
    } 
} 

açıkça sorunun kaynağı olarak,: Yani bu tanımlanmalıdır.