Bonjour,
j'ai une entite animal simple

class animal
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="testBundle\Entity\Personne", cascade={"persist"})
    */
    private $personne;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->personne = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Add personne
     *
     * @param \testBundle\Entity\Personne $personne
     * @return animal
     */
    public function addPersonne(\testBundle\Entity\Personne $personne)
    {
        $this->personne[] = $personne;

        return $this;
    }

    /**
     * Remove personne
     *
     * @param \testBundle\Entity\Personne $personne
     */
    public function removePersonne(\testBundle\Entity\Personne $personne)
    {
        $this->personne->removeElement($personne);
    }

    /**
     * Get personne
     *
     * @return \testBundle\Entity\Personne 
     */
    public function getPersonne()
    {
        return $this->personne;
    }
}

et voila comment est construit le Formulaire

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
             ->add('personne', 'entity', array(
                'class' => 'testBundle:Personne',
                'property' => 'nom',
                'multiple' => true
            ))
             ->add('ok','submit')
        ;
    }

Generalement dans uen relation ManyToOne le multiple est a false et sa marche bien mais moi je veut pouvoir selectionner plusieurs a la fois d'ou les methode addPersonne et RemovePersonne , le probleme c'est qu'au moment du persist j'ai une erreur :
Found entity of type Doctrine\Common\Collections\ArrayCollection on association testBundle\Entity\animal#personne, but expecting testBundle\Entity\Personne
Merci d'avance

3 réponses


Salut, à mon avis c'est normal, dans ta relation, si on lit la relation du côté Personne, tu demandes à ce qu'une personne ait plusieurs animals (1-n) , donc ce sera plutôt dans PersonneType que doit être présent le type de champ 'entity', une autre, tu gardes ce champ mais en rajoutant un paramètre mapped à false et puis tu traites ces valeurs du côté controlleur, ou bien inverse la relation.

Oui c'est ce que j'ai fais j'ai cree un variable qui serais un arrayCollection apres je fais des traitement dans le controller mais bon c'est plus la galere qu'autre chose . merci comme meme

Salut, l'erreur que tu as est parlante. Ta relation c'est : une personne peut avoir plusieurs animaux, mais un animal n'appartient que à une personne.

Pourtant, dans ton construct tu dis que ton attribut "personne" est une "ArrayCollection". Ce qui est faux, car un animal n'appartient que à une personne. Par conséquent, ton attribut doit être de type "Personne".