我有三张桌子:
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
?仅选择未“删除”的文件。
答案 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