Bonjour à toutes et à tous,

Je m'essaye à la relation Many-To-Many sur un cas basique avec 3 entités:

- User (iduser, nom,...)
- Societe (idsociete, nom,...)
- user_societe (iduser, idsociete)

Je souhaite donc qu'un utilisateur puisse être rattaché à une ou plusieurs société.

Après avoir suivis plusieurs tuto et les docs de symfony/doctrine je me retrouve bloqué. Lorsque j'essaye d'attacher une société à un utilisateur je me retrouve avec l'erreur suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Warning: oci_bind_by_name() [<a href='function.oci-bind-by-name'>function.oci-bind-by-name</a>]: Invalid variable used for bind in C:\wamp\www\php\Promocast\Symfony\vendor\doctrine-dbal\lib\Doctrine\DBAL\Driver\OCI8\OCI8Statement.php line 112
J'ai donc tenté des recherches mais aucun résultat. J'ai donc essayé de débug à la main pour essayer de voir ce qui cloche et j'ai l'impression que c'est lorsque le bind passe sur l'objet societe (à associer à l'user).

Voici ce qui fait créée l'erreur selon le stack trace:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
array('column' => ':param10', 'variable' => object(PcastSociete), 'type' => '1')
Voici mon entité User (ce qui importe du moins):

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
	/**
     * @ORM\ManyToMany(targetEntity="PcastSociete", inversedBy="users")
     * @ORM\JoinTable(name="PcastLienusersociete",
     *   joinColumns={@ORM\JoinColumn(name="ImUser_iduser", referencedColumnName="iduser")},
     *   inverseJoinColumns={@ORM\JoinColumn(name="PcastLienusersociete_idsociete", referencedColumnName="idsociete")}
     * )
     */
    private $societes;
 
    public function getSocietes()
    {
        return $this->societes;
    }
 
    public function addSociete(\Myapp\UtilisateurBundle\Entity\PcastSociete $societe)
    {
        $this->societes[] = $societe;
    }
Mon entité société :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
	/**
     * @ORM\ManyToMany(targetEntity="ImUser", mappedBy="societes")
     */
    private $users;
 
    public function __construct() {
        $this->users = new \Doctrine\Common\Collections\ArrayCollection();
    }
Ma table de lien:

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
 
namespace Myapp\UtilisateurBundle\Entity;
 
use Doctrine\ORM\Mapping as ORM;
 
/**
 * Myapp\UtilisateurBundle\Entity\PcastLienusersociete
 *
 * @ORM\Table(name="PCAST_LIENUSERSOCIETE")
 * @ORM\Entity
 */
class PcastLienusersociete
{
    /**
     * @var integer $idsociete
     *
     * @ORM\Column(name="IDSOCIETE", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    private $idsociete;
 
    /**
     * @var integer $iduser
     *
     * @ORM\Column(name="IDUSER", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    private $iduser;
 
 
 
    /**
     * Set iduser
     *
     * @param Myapp\UtilisateurBundle\Entity\ImUser $iduser
     * 
     */
    public function setIduser(\Myapp\UtilisateurBundle\Entity\ImUser $iduser)
    {
        $this->iduser = $iduser;
    }
 
    /**
     * Get iduser
     *
     * @return Myapp\UtilisateurBundle\Entity\ImUser 
     */
    public function getIduser()
    {
        return $this->iduser;
    }
 
    /**
     * Set idsociete
     *
     * @param Myapp\UtilisateurBundle\Entity\Pcastsociete $idsociete
     */
    public function setIdsociete(\Myapp\UtilisateurBundle\Entity\Pcastsociete $idsociete)
    {
        $this->idsociete = $idsociete;
    }
 
    /**
     * Get idsociete
     *
     * @return Myapp\UtilisateurBundle\Entity\Pcastsociete 
     */
    public function getIdsociete()
    {
        return $this->idsociete;
    }
}
et enfin comment j'ajoute une nouvelle société à mon user (c'est un simple test):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$test_societe = $em->getRepository('MyappUtilisateurBundle:PcastSociete')->find(49);
$newUser->addSociete($test_societe);
En vous remerciant d'avance pour votre aide

Cordialement,

Coussinsky

PS: Ma table de lien a été créée à la main d'où la description plus précise de la jointure dans les annotations de mon entité user.