最近、ManyToMany
リレーションシップジョインテーブルをクエリする際に問題が発生しました。解決方法はanswerと同じでした。 は私がgroups
とteam
間の単純なManyToMany
の関係は、自動的に順番にここDoctrineとSymfony2を使用した多対多リレーションシップの内部結合の仕組み
グループエンティティ
/**
* Groups
*
* @ORM\Table(name="groups")
* @ORM\Entity(repositoryClass="AppBundle\Model\Repository\GroupsRepository")
*/
class Groups {
/**
* @ORM\ManyToMany(targetEntity="Team", inversedBy="group")
*/
protected $team;
public function __construct() {
$this->team = new ArrayCollection();
}
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="groupname", type="string", length=255)
*/
private $groupname;
//obligatory getters and setters :)
チームエンティティ
/**
* Team
*
* @ORM\Table(name="team")
* @ORM\Entity(repositoryClass="AppBundle\Model\Repository\TeamRepository")
*/
class Team {
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
public function __construct(){
$this->group = new ArrayCollection();
}
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="teamname", type="string", length=255)
*/
private $team;
//[setters and getters here]
作成されますgroups_team
テーブルがあるだろう持って言うことができますグループ内のすべてのチームを取得するには、groups_team
table.iを照会する必要があります。これは、mysqlでテーブルを直接照会しただけですが、 symfonyは私がinnerJoin
が動作しているか、この
$groups = $em->getRepository("AppBundle\Model\Entity\Groups")->findBy(array('tournament' => $tournament->getId()));
//get all teams with group id in groups_team table
foreach ($groups as $group) {
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")->createQueryBuilder('o')
->innerJoin('o.group', 't')
->where('t.id = :group_id')
->setParameter('group_id', $group->getId())
->getQuery()->getResult();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}
は、誰かが私に説明できなければならないと、この背後にある考え方、これについて学ぶために、多分、いくつかのドキュメントは何ですか。 symfonyと教義でこれを行うより良い方法があります。
ありがとう、これは私のコードを減らし、より合理的なコードを考え直すために私を始めました。これは私の質問に100%答えました。 SOは素晴らしいプラットフォームです。 +1 –