我有三种类型的实体,
- 用户
- 团体
- 网站
用户可以有网站,他们也可以属于组这些实体中的每一个也有一个名称。
这是我的 Doctrine2 定义:
<?php
/** @Entity */
class User
{
// ...
/**
* @Column(type="string",length=255,nullable=false)
* @var string
*/
protected $name;
/**
* @ManyToMany(targetEntity="Group", inversedBy="users")
* @JoinTable(name="users_groups")
*/
private $groups;
/**
* @ManyToMany(targetEntity="Website", inversedBy="users")
* @JoinTable(name="users_websites")
*/
private $websites;
// ...
}
/** @Entity */
class Group
{
// ...
/**
* @Column(type="string",length=255,nullable=false)
* @var string
*/
protected $name;
/**
* @ManyToMany(targetEntity="User", mappedBy="groups")
*/
private $users;
// ...
}
/** @Entity */
class Website
{
// ...
/**
* @Column(type="string",length=255,nullable=false)
* @var string
*/
protected $name;
/**
* @ManyToMany(targetEntity="User", mappedBy="websites")
*/
private $users;
// ...
}
所以现在如果我想在一个名为“Admins”的组中找到所有用户,我可以这样做:
$group = $em->getRepository("Group")->findOneByName("Admins");
$users = $group->users;
我还可以通过以下方式获取与网站“Google.com”相关联的所有用户:
$websites = $em->getRepository("Website")->findOneByName("Google.com");
$users = $websites->users;
现在,如果我想获取“Admins”中的所有用户,并且还与“Google”网站相关联,我该怎么办?
如果我使用 TSQL,我会加入这三个表,我该如何在 Doctrine 中做到这一点?
我必须使用 DQL 吗?DQL 会是什么样子?