私には3つのタイプのエンティティがあります。
- ユーザー
- グループ
- ウェブサイト
ユーザーはWebサイトを持つことができ、グループに属することもできます。これらの各エンティティにも名前があります。
これが私の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;
「管理者」に所属し、ウェブサイト「Google」にも関連付けられているすべてのユーザーを取得したい場合、どうすればよいですか?
TSQLを使用している場合、3つのテーブルを結合しますが、Doctrineでそれを行うにはどうすればよいですか?
DQLを使用する必要がありますか?DQLはどのように見えますか?