使用学说,我想删除一个表中的记录基于从多个表收集的数据。

“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 ) );

(我的学说模型是“Company_group”为“companies_groups”表和“组”为“基团”表)

哪些产生此SQL:

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

可以看出,生成的SQL缺少“companies_groups”和DELETE FROM之间,并且所述限定词被丢弃(意为“ID”将是模糊的)。

让我知道,如果有任何额外的信息,我可以提供将是有益的。

有帮助吗?

解决方案

解决它。而不是试图建立自己加盟我用了一个子查询,并没有试图迫使学说构建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')" );

干杯。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top