2010-02-11 15 views
2

使用Doctrine,我試圖根據從多個表中收集的數據刪除單個表中的記錄。使用Doctrine在MySQL數據庫上刪除多表的語法是什麼?

'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,以及世界盃預選賽被丟棄(意爲「身份證」將是模糊的)。

讓我知道是否有任何額外的信息,我可以提供這將是有益的。

回答

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')"); 

乾杯。

相關問題