IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[5.x] many-to-many avec champ supplémentaire - formulaire


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Par défaut [5.x] many-to-many avec champ supplémentaire - formulaire
    Bonjour à tous !

    j'ai 2 entités : Note et Category telles que Note < many-to-many > Category ; jusque là, tout va bien

    mais je voudrais ajouter un ordre de tri d'une note au sein d'une catégorie
    après quelques recherches, j'ai donc transformé ça en Note < many-to-one > NoteCategory <one-to-many > Category (l'entité NoteCategory portant l'ordre de tri) ; jusque là, ça va encore à peu près ^^

    où ça se corse, c'est au niveau du formulaire d'ajout / modification de note :
    comme une note peut être dans plusieurs catégories, j'ai fait un champ de type multi-checkbox pour les catégories :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    $formBuilder
                    ->add('noteCategories', EntityType::class, [
                        'label' => 'Catégories',
                        'class' => Category::class,
                        'query_builder' => function (EntityRepository $er) {
                            return $er->createQueryBuilder('c')
                                ->andWhere('c.user = :user')
                                ->setParameter('user', $this->security->getUser());
                        },
                        'multiple' => true,
                        'expanded' => true,
                        'choice_attr' => function ($val, $key, $index) use ($category) {
                            if (!empty($category) && $index == $category->getId()) {
                                return ['checked' => true];
                            }
                            else {
                                return ['checked' => false];
                            }
                        },
                        'required' => false
                    ]);
    j'ai à peu près réussi à ajouter une note (et ses x catégories) en créant manuellement la jointure (mais c'est pas très "automagique" ^^)
    en revanche, l'édition ne fonctionne pas du tout
    je veux pouvoir choisir une ou plusieurs catégorie parmi toutes celles de l'utilisateur courant (et non pas seulement celles auxquelles est déjà rattachée la note éditée)

    j'ai trouvé plusieurs réponses qui disent d'enlever le 'multiple' => true
    oui mais non, sinon, autant fait une bête relation Note < many-to-one > Category


    bref, je bloque un peu là...
    avez-vous une idée géniale (à part revoir mon modèle de données ) ?

    merci d'avance !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Curieux
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Curieux
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Par défaut Difficile de répondre sans voir le sens des liaisons
    Etes vous sur d'être dans le bon sens de liaison ? entre inversedBy et mappedBy

  3. #3
    Membre confirmé Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Par défaut
    bonjour,

    logiquement oui

    Category.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /**
         * @ORM\OneToMany(targetEntity=NoteCategory::class, mappedBy="category", orphanRemoval=true)
         */
        private $noteCategories;
    Note.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
        /**
         * @ORM\OneToMany(targetEntity=NoteCategory::class, mappedBy="note", orphanRemoval=true)
         */
        private $noteCategories;
    NoteCategory.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
        /**
         * @ORM\ManyToOne(targetEntity=Note::class, inversedBy="noteCategories")
         * @ORM\JoinColumn(nullable=false)
         */
        private $note;
     
        /**
         * @ORM\ManyToOne(targetEntity=Category::class, inversedBy="noteCategories")
         * @ORM\JoinColumn(nullable=false)
         */
        private $category;

  4. #4
    Membre à l'essai
    Homme Profil pro
    Curieux
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Curieux
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Par défaut Je crois que vous n'allez pas dans le bon sens... en annexe une démo
    Bonjour,
    Malheureusement pour moi c'est incompréhensible entre votre explication et vos requêtes..

    Je vous annexe ce qui devrait fonctionner selon ce que j'ai compris entre votre explication et votre code.

    Merci de prendre note que pouvoir exécuter cela il vous faut PHP8!!! et SF5
    Une fois cela réglé vous allez dans le projet et vous faites : composer install

    Le point d'entré est votre http://votre_serveur/user

    project.zip

  5. #5
    Membre confirmé Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Par défaut
    merci mais ça ne correspond pas à ce que je veux

    oublions User qui n'a rien à voir avec mon affaire

    entre Note et Category, c'est bien (et ça doit rester) une relation many-to-many, avec un paramètre "position" en plus (qui permet de définir l'ordre de tri d'une note dans une catégorie) donc j'ai "explosé" cette relation en 2 relations many-to-one autour d'une entité (NoteCategory) qui représente la table de jointure (grosso modo) et qui a cette propriété "$position"

    mais j'ai peut-être une idée, il faut que je teste

    EDIT : non, mon idée ne fonctionne pas :'(

  6. #6
    Membre à l'essai
    Homme Profil pro
    Curieux
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Curieux
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Par défaut Manytomany
    Vous avez essayez?
    Vous devriez jeter un coup d'oeil a:
    CategoryRepository -> use Sort;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    trait Sort
    {
        public static function sort(string $order = 'ASC'): Criteria
        {
            return Criteria::create()
                ->orderBy(['position' => $order])
                ;
        }
    }
    et
    show.html.twig...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     {% for user in category.sortUser(order) %}
    ....
     {% endfor %}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Problème maj table avec champs de formulaire
    Par ctsblv dans le forum VBA Access
    Réponses: 8
    Dernier message: 09/04/2013, 21h13
  2. [WD-2000] En tete avec champs de formulaire
    Par castor123456 dans le forum Word
    Réponses: 14
    Dernier message: 08/02/2012, 16h42
  3. [1.x] table many to many et champ supplémentaire
    Par maniT4c dans le forum Symfony
    Réponses: 1
    Dernier message: 29/06/2011, 10h11
  4. [CakePHP] relation HABTM avec champs supplémentaires
    Par Lolo19 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 23/04/2010, 09h50
  5. Réponses: 2
    Dernier message: 15/04/2006, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo