什么是多表中删除使用Doctrine MySQL数据库的语法?
-
20-09-2019 - |
题
使用学说,我想删除一个表中的记录基于从多个表收集的数据。
“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')" );
干杯。
不隶属于 StackOverflow