1
連接三個表我有三個類型的實體,選擇實體,Doctrine2
- 用戶
- 組
- 網站
用戶可以擁有自己的網站,並他們也可以屬於組 這些實體中的每一個都有一個名字。
這裏是我的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;
// ...
}
所以現在,如果我想找到一個所謂的「管理員」組中的所有用戶,我可以這樣做:
$group = $em->getRepository("Group")->findOneByName("Admins");
$users = $group->users;
我還可以得到由做與網站「Google.com」相關聯的所有用戶:
$websites = $em->getRepository("Website")->findOneByName("Google.com");
$users = $websites->users;
現在,如果我要得到誰是我的所有用戶n「管理員」,也與網站「Google」相關聯,我該怎麼辦?
如果我使用的是TSQL,我會加入這三個表,我該如何在Doctrine中做到這一點?
我必須使用DQL嗎? DQL將如何?
謝謝你,我糾正了我的代碼,你的代碼忽略了兩個where子句之間的AND,但是它在糾正之後起作用 – Yasser1984 2012-07-08 17:47:39
你說得對,我已經更新了我的答案 – AdrienBrault 2012-07-08 17:52:14