2016-12-20 2 views
0

Я хочу сделать отношение ManyToMany в Doctrine с Symfony 2 между группой и пользователем: многие пользователи могут быть во многих группах, и многие группы могут иметь много пользователей.Ошибка при попытке сделать отношение ManyToMany в Symfony 2

Тогда в моих сущностей, я это сделать:

Groupe.php

/** 
* Many Groups have Many clients. 
* @ORM\ManyToMany(targetEntity="Utilisateurs\UtilisateursBundle\Entity\Client", mappedBy="groupe") 
* @ORM\JoinTable(name="client_groupe") 
*/ 
private $clients; 

/** 
* Get clients 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getClients() 
{ 
    return $this->clients; 
} 

Client.php

/** 
    * @ORM\ManyToMany(targetEntity="Ecommerce\EcommerceBundle\Entity\Groupe", inversedBy="clients")  
    * @ORM\JoinTable(name="client_groupe", 
    * joinColumns={@ORM\JoinColumn(name="client_id", referencedColumnName="id")}, 
    * inverseJoinColumns={@ORM\JoinColumn(name="groupe_id", referencedColumnName="id")} 
    *) 

    */ 
    private $groupe; 

, но когда я называю getClients() функцию на мой предприятие $groupe, произошла ошибка:

FROM client t0 WHERE client_groupe.groupe_id = ?' with params ["2"]: 

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'client_groupe.groupe_id' in 'where clause' 

Он не добавляет таблицу client_groupe в предложении from.

Кто-нибудь может мне помочь?

+0

Попробуйте удалить 'name =" group_id "и' name = "client_id" в файл client.php, поэтому symfony может генерировать сам столбец. – Preciel

ответ

1

Не нужно добавлять client_groupe стол из пункта. Попробуйте удалить * @ORM\JoinTable(name="client_groupe") из Groupe.php. Взгляните на рабочий пример сценария отношений ManyToMany.

Groupe.php

/** 
* Many Groups have Many clients 
* @ORM\ManyToMany(targetEntity="Utilisateurs\UtilisateursBundle\Entity\Client", mappedBy="groupe") 
*/ 
private $clients; 

Client.php

/** 
* @ORM\ManyToMany(targetEntity="Ecommerce\EcommerceBundle\Entity\Groupe", inversedBy="clients")  
* @ORM\JoinTable(name="client_groupe", 
* joinColumns={@ORM\JoinColumn(name="client_id", referencedColumnName="id")}, 
* inverseJoinColumns={@ORM\JoinColumn(name="groupe_id", referencedColumnName="id")} 
*) 
*/ 
private $groupe; 

client_id и groupe_id это поле client_groupe таблицы. Создайте Getter и setter, используя команду doctrine и обновите базу данных с помощью команды bin/console doctrine:schema:update --force.

Смежные вопросы