【发布时间】:2014-05-31 00:53:27
【问题描述】:
我有以下表格,用户、项目和图像。
用户与项目和图像具有一对多的关系。每个项目和图像都归一个用户所有。
项目与图像具有多对多关系。所以每个Project可以有很多Image,一个Image可以出现在很多Project中。
我想为未包含在任何项目中的特定用户编写一个 DQL 查询来获取所有图像。这我可以用 SQL 编写。
用 SQL 编写是最好的方法吗?
或者我应该使用 DQL 来执行此操作吗?
我曾尝试编写 DQL,但它的工作很辛苦!
编辑
在我的图像仓库中,我现在正在这样做
$qb = $this->createQueryBuilder("i");
$qb->select("i")
->from('MyBundleName:User','u')
->innerJoin('u.images', 'user_images')
->where('IDENTITY(u.id) = :user_id')
->andWhere('NOT EXISTS (
SELECT p
FROM MyBundleName:Project p
WHERE user_images MEMBER of p.images
)')
->setParameter('user_id', $user_id);
我已经用: 替换了我的课程的/ 语法,因为它们在使用/ 时失败了
我仍然收到此错误;
[语义错误] 第 0 行,第 131 列靠近 'id) = :user_id':错误: 无效的路径表达式。必须是 SingleValuedAssociationField。
函数createQueryBuilder 需要一个别名,我将它传递给"i" - 对吗?
然后我在调用select时再次给它"i"?
如果我删除 innerJoin 则它可以工作,但结果是错误的。它返回所有图像,即使它们确实存在于项目中。
【问题讨论】:
标签: sql symfony doctrine-orm