Qual è la sintassi per un multi-tavolo delete su un database MySQL utilizzando dottrina?
-
20-09-2019 - |
Domanda
Dottrina , sto cercando di eliminare i record in una singola tabella sulla base dei dati raccolti da più tabelle.
'companies_groups' è una tabella di associazione che collega a 'gruppi' 'delle aziende. Voglio eliminare tutti i record in questa tabella collegata ad una società specifica, con la restrizione che solo i record 'companies_groups' legate a un gruppo di 'pubblico' verranno eliminati.
Se dovessi scrivere questo in puro SQL, che sarebbe simile a questa:
DELETE companies_groups
FROM companies_groups, groups
WHERE companies_groups.companyID = 7
AND companies_groups.groupID = groups.id
AND groups.groupType = 'public'
Qual è l'equivalente in dottrina? Ho lottato e sperimentare per un'ora o così ora.
Al momento ho questa:
$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 ) );
(I miei modelli sono Dottrina 'Company_group' per la tavola il 'companies_groups' e 'gruppo' per la tabella 'gruppi')
che produce questo SQL:
DELETE FROM companies_groups, groups WHERE (companyid = ? AND grouptype = 'public' AND id = groupid)
Si può vedere che il codice SQL generato manca 'companies_groups' tra DELETE e FROM, e che le qualificazioni vengono eliminati (che significa 'id' sarà ambiguo).
Fatemi sapere se c'è qualsiasi informazioni posso fornire che sarebbe utile.
Soluzione
Risolto esso. Piuttosto che cercare di costruire il join me stesso ho usato una sottoquery e non hanno cercato di forzare Dottrina per la costruzione della SQL in modo specifico.
Per chiunque altro che mai ha bisogno di fare qualcosa di simile, qui è quello che ha finito per lavorare:
$query = Doctrine_Query::create()
->delete('Company_group')
->where( "companyID = ?", array( $companyID ) )
->addWhere( "groupID IN (SELECT g.id FROM Group g WHERE g.groupType = 'public')" );
Saluti.