Ema*_*jar 16 php mysql many-to-many symfony doctrine-orm
我很想知道多对多关系如何与Doctrine和Symfony2一起工作.
我重新创建了官方文档(goo.gl/GYcVE0)中显示的示例,我有两个实体类:用户和组,如下所示.
<?php
/** @Entity **/
class User
{
// ...
/**
* @ManyToMany(targetEntity="Group", inversedBy="users")
* @JoinTable(name="users_groups")
**/
private $groups;
public function __construct() {
$this->groups = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
/** @Entity **/
class Group
{
// ...
/**
* @ManyToMany(targetEntity="User", mappedBy="groups")
**/
private $users;
public function __construct() {
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果我更新我的数据库,我得到这个MySQL架构:
CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE users_groups (
user_id INT NOT NULL,
group_id INT NOT NULL,
PRIMARY KEY(user_id, group_id)
) ENGINE = InnoDB;
CREATE TABLE Group (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id);
ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id);
Run Code Online (Sandbox Code Playgroud)
问题是在Symfony2中我需要实体来生成查询,在这种情况下,我没有与表关联的实体,users_group因为该表是由框架自动创建的.
那么,我如何检索与此关系表相关的信息?例如,我需要获取组中的所有用户,这些用户具有出现在表中的ID users_group.
如何使用DQL,QueryBuilder或其他方法执行此操作?
非常感谢.
M K*_*aid 27
您可以编写一个连接DQL查询,如下所示
$em = $this->getContainer()->get('doctrine')->getManager();
$repository = $em->getRepository('YourNamespaceYourBundle:User');
$query = $repository->createQueryBuilder('u')
->innerJoin('u.groups', 'g')
->where('g.id = :group_id')
->setParameter('group_id', 5)
->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)
您groups在User实体中的属性映射将处理连接部件本身,您不必在DQL查询中提及连接表