Используя 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 являются «Company_group» для таблицы «companies_groups» и «Group» для таблицы «groups»)
Который производит этот SQL:
DELETE FROM companies_groups, groups WHERE (companyid = ? AND grouptype = 'public' AND id = groupid)
Вы можете видеть, что в сгенерированном SQL отсутствует «companies_groups» между DELETE и FROM, и что квалификаторы отброшены (что означает, что id будет неоднозначным).
Дайте мне знать, если есть какая-либо дополнительная информация, которую я могу предоставить, которая будет полезна.