3

使用Doctrine,我试图根据从多个表中收集的数据删除单个表中的记录。

“companies_groups”是将“公司”链接到“组”的关联表。我想删除此表中链接到特定公司的所有记录,但只有链接到“公共”组的“companies_groups”记录才会被删除。

如果我用纯 SQL 编写它,它看起来像这样:

DELETE companies_groups
FROM companies_groups, groups
WHERE companies_groups.companyID = 7
AND companies_groups.groupID = groups.id
AND groups.groupType = 'public'

教义中的等价物是什么?我一直在挣扎和尝试一个小时左右。

目前我有这个:

$query = Doctrine_Query::create()
  ->delete('Company_group cg')
  ->from('Company_group cg, Group g')
  ->where( "cg.companyID = ? AND g.groupType = 'public' AND g.id = cg.groupID ", array( $companyID ) );

(我的 Doctrine 模型是“companies_groups”表的“Company_group”和“groups”表的“Group”)

这会产生这个 SQL:

DELETE FROM companies_groups, groups WHERE (companyid = ? AND grouptype = 'public' AND id = groupid)

您可以看到生成的 SQL 在 DELETE 和 FROM 之间缺少“companies_groups”,并且限定符被删除(意味着“id”将不明确)。

让我知道我是否可以提供任何有用的其他信息。

4

1 回答 1

1

解决了。我没有尝试自己构建连接,而是使用了子查询并且没有尝试强制 Doctrine 以特定方式构建 SQL。

对于任何需要做这样的事情的人来说,这就是最终的工作:

$query = Doctrine_Query::create()
  ->delete('Company_group')
  ->where( "companyID = ?", array( $companyID ) )
  ->addWhere( "groupID IN (SELECT g.id FROM Group g WHERE g.groupType = 'public')" );

干杯。

于 2010-02-11T22:12:04.167 回答