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

Doctrine2 PHP Discussion :

public function __toString() { return $this->toto; }


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut public function __toString() { return $this->toto; }
    Bonjour, quelqu'un peu m'aider :

    J'ai deux tables
    table1: id -> clé primaire
    table2: id_app -> clé étrangère (vers id de la table1)

    Relation entre les 2 tables (Doctrine) :

    Table1.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     /**
         
         * @ORM\ManyToMany(targetEntity="Table2", mappedBy="table1")
         */
        private $suisseapptext;
     
        public function __construct()
        {
            $this->suisseapptext = new \Doctrine\Common\Collections\ArrayCollection();
        }
    Table2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /**
         * @ORM\ManyToOne(targetEntity="Table1")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="id_app", referencedColumnName="id")
         * })
         */
        private $idApp;
     
        public function __construct()
        {
            $this->suisseapp = new \Doctrine\Common\Collections\ArrayCollection();
        }
    1. Lorsque je lance la page : qui appelle à la Table1 la liste déroulante (id_app) n'affiche rien 2. et lorsque je lance la page qui fait appelle a Table2 pour un nouveau formulaire j'ai l'erreur :
    Entity "xxxx\xxxxxxx\Entity\Table1" passed to the choice field must have a "__toString()" method defined (or you can also override the "property" option).
    la solution : faudrait ajouter une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function __toString() {
        return $this->toto;
    }
    Mais je n'arrive pas a comprendre la valeur de toto et dans quelle entité (Table1.php ou Table2.php) foudrait il ajouter la fonction??

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Par défaut
    La valeur de toto est toujours égale à zéro, c'est bien connu.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    faut rajouter l'option property (dans ton formulaire) comme le dis l'erreur ...

  4. #4
    Membre éprouvé Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Pour faire simple, ton formulaire va te créer une liste déroulante pour que tu puisse choisir l'entité que tu veux lier.

    La fonction __toString va permettre de définir un texte pour ton entité.

    Donc en gros elle comprendra la version textuelle de ton entité.

    PS : Comment tu peux avoir une relation ManyToMany d'un côté et ManyToOne de l'autre ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    j'ai pas résolu ce probleme en rajoutant cette méthode car je comprends pas ce que faudrait mettre dans return this->xxxx, en fait j'ai modifier et rajouter l'option property dans Form/EntitéxType.php :
    par exemple :
    ->add('id_Desk','entity', array('class'=>'Tuto\BlogBundle\Entity\Desk', 'property'=>'id', ));

    Pour répondre a la question je t'invite a regarder cette excellente doc sur Doctrine et Symfony2:
    http://guidella.free.fr/General/symf...Reference.html

    Merci

  6. #6
    Membre éprouvé Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Bah c'est assez simple en fait tu met la valeur que tu veux afficher quand tu fais un écho de ton instance.

    Admettons une entité User

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class User{
     
    private firstName;
    private lastName;
    private birthDate;
     
    public function __toString(){
     return $this->firstname.' '.$this->lastName;
    }
    }
    En gros tu met un peux le truc le plus représentatif de ta classe;

    comme ca quand tu fera un echo de ton instance de classe, ça t'affichera le Nom et le Prénom de ton utilisateur.

    Concernant tes relations entre tes entités, admettons que Table1 soit un membre et Table2 un Groupe, tu dis au travers de ta relation ManyToMany :


    "Un membre peut appartenir à plusieurs groupes. À l'inverse, un groupe peut contenir plusieurs membres"

    Puis dans ta relation ManyToOne :

    "'Un Membre peut appartenir a plusieurs groupe mais un groupe ne peut contenir qu'un seul membre"

    Donc c'est contradictoire

    Si tu met un ManyToMany a table1 il faut que table2 est un ManyToMany.

    Pareil pour un ManyToOne, tu ne peux qu'avoir un OneToMany de l'autre côté.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/05/2010, 15h53
  2. [XL-2007] adapter une formule créée en public function
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/08/2009, 19h22
  3. public static function = public function
    Par Jcpan dans le forum Langage
    Réponses: 4
    Dernier message: 30/03/2009, 15h28
  4. Function sans Return
    Par Danyel dans le forum VB.NET
    Réponses: 5
    Dernier message: 02/05/2008, 17h10
  5. [VB]Erreur: Function must return variant
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/02/2006, 12h23

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