doctrine:与join表有多对多的关系:如何添加WHERE条件

时间:2012-05-30 12:48:57

标签: doctrine doctrine-orm many-to-many conditional-statements

我有三张桌子:

Clients: (id, name, ...)

Files: (id, filename, type, data)

并加入表格:

Clients2Files (id, id_clients, id_files, created_at, deleted_at)

在php类客户端我希望能够访问所有客户端的文件,但只能访问尚未删除的文件(在sql中说WHERE deleted_at IS NULL)

现在我有这样的代码(在实体类Client中),它选择所有(甚至删除的)文件:

/**                                                                         
* @ManyToMany(targetEntity="File")                                          
* @JoinTable(name="Clients2Files",                                  
*      joinColumns={@JoinColumn(name="id_clients", referencedColumnName="id")},
*      inverseJoinColumns={@JoinColumn(name="id_files", referencedColumnName="id")}
*      )                                                                    
*/                                                                          
private $files;              

如何在此学说代码中添加条件WHERE deleted_at IS NULL?仅选择未“删除”的文件。

1 个答案:

答案 0 :(得分:1)

您添加的注释实际上并不“选择”任何内容。他们所做的就是告诉Doctrine你的对象及其关系。你想要做的是:

$qb = $em->createQueryBuilder();
$qb->select('clients, files')
   ->from('Clients', 'clients')
   ->join('c.files', 'files')
   ->where('files.deleted_at IS NULL');

如果您发现自己经常这样做,并且正在使用Doctrine 2.2+,您可以查看过滤器:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/filters.html