Frage

Mit Lehre , ich versuche zu löschen Aufzeichnungen in einer einzigen Tabelle basierend auf Daten aus mehreren Tabellen gesammelt.

‚companies_groups‘ eine Zuordnungstabelle Verknüpfung ‚Unternehmen‘ auf ‚Gruppen‘. Ich möchte alle Datensätze in dieser Tabelle zu einem bestimmten Unternehmen, mit der Einschränkung verbunden löschen, dass nur ‚companies_groups‘ Aufzeichnungen zu einer ‚öffentlichen‘ Gruppe verknüpft wird gelöscht.

Wenn ich dies in reiner SQL schreiben bin, ist es in etwa so aussehen:

DELETE companies_groups
FROM companies_groups, groups
WHERE companies_groups.companyID = 7
AND companies_groups.groupID = groups.id
AND groups.groupType = 'public'

Was ist das Äquivalent in Lehre? Ich habe zu kämpfen und für eine Stunde zu experimentieren oder so jetzt.

Im Moment habe ich diese:

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

(meine Lehre Modelle sind ‚Company_group‘ für die ‚companies_groups‘ Tisch und ‚Gruppe‘ für die ‚Gruppen‘ Tabelle)

Welche diese SQL erzeugt:

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

Sie können sehen, dass die erzeugte SQL fehlt ‚companies_groups‘ zwischen Löschen und, und, dass die Qualifikations fallen gelassen werden (was bedeutet, ‚id‘ wird mehrdeutig).

Lassen Sie mich wissen, ob es irgendwelche zusätzlichen Informationen, die ich, dass wäre hilfreich zur Verfügung stellen kann.

War es hilfreich?

Lösung

es wird gelöst. Anstatt zu versuchen, die zu bauen kommen ich mir eine Unterabfrage verwendet, und nicht versuchen, Lehre zu zwingen, die SQL in einer bestimmten Art und Weise zu konstruieren.

Für alle anderen, dass jemals so etwas zu tun braucht, hier ist das, was Arbeit endete:

$query = Doctrine_Query::create()
  ->delete('Company_group')
  ->where( "companyID = ?", array( $companyID ) )
  ->addWhere( "groupID IN (SELECT g.id FROM Group g WHERE g.groupType = 'public')" );

Prost.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top