Bonjour,

Je cherche à gérer des entités dans une collection.
J'ai une table aliment qui contient des objet aliment et qui peut être consultée dans une liste.
J'ai une table article qui contient des articles qui peuvent traiter d'aliments.

  /**
     * @return Collection<int, Aliment>
     */
    public function getAliments(): Collection
    {
        return $this->aliments;
    }

    public function addAliment(Aliment $aliment): self
    {
        if (!$this->aliments->contains($aliment)) {
            $this->aliments->add($aliment);
        }

        return $this;
    }

    public function removeAliment(Aliment $aliment): self
    {
        $this->aliments->removeElement($aliment);

        return $this;
    }

Si j'écris un article sur les bienfaits de l'aubergine farcie aux lentilles, je veux pouvoir ajouter les aliments Aubergine et Lentilles à la collection d'aliments de mon article. Ces aliments sont déjà existants ! Si je retire Lentilles de la collection, je ne dois pas supprimer les lentilles de la liste des aliments.

Dans les exemples que je trouve j'ai des messages avec des commentaires et le commentaire disparait avec le message. Dans mon cas, l'aliment existe avant l'article et ne disparait pas avec lui.

Ce que j'obtiens

Pour le moment, j'arrive à faire un formbuilder qui me permet d'éditer les aliments de l'article que j'ai créé en dur dans mes fixtures, mais je ne sais ni comment créer un bouton pour ajouter un aliment à ma collection, ni comment créer un bouton pour remove...

class ArticleAddAlimentFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
        ->add('aliments', CollectionType::class, [
            'entry_type' => EntityType::class,
            // 'allow_add' => true,
            // 'allow_delete' => true,
            'entry_options' => [
                'required'   => false,
                'mapped' => true,
                'class' => Aliment::class,
                'choice_label' => 'title',
                // 'placeholder' => 'Ajoutez un aliment'
                // 'attr' => [
                //     'class' => 'form-control w-100 m-auto',
                // ]
                ]
            ]);
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => Article::class,
        ]);
    }
}

1 réponse


Bonjour,

Tu peux simplement créer une propriété et injecter les id de t'es aliments.