Quelle est la syntaxe pour une suppression multi-tables sur une base de données MySQL en utilisant Doctrine?

StackOverflow https://stackoverflow.com/questions/2247905

Question

Utilisation Doctrine , je suis en train de supprimer des enregistrements dans une seule table à partir des données recueillies à partir de plusieurs tables.

'companies_groups' est une table d'association liant 'entreprises aux 'groupes'. Je veux supprimer tous les enregistrements de cette table liée à une société spécifique, avec la restriction que seuls les dossiers «companies_groups de lié à un groupe « public » seront supprimés.

Si je devais écrire ce dans SQL pur, il ressemblerait à quelque chose comme ceci:

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

Quel est l'équivalent dans la doctrine? Je me bats et expérimenter pendant une heure ou maintenant.

En ce moment j'ai ceci:

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

(Mes modèles Doctrine sont 'Company_group' pour la table 'companies_groups et de 'groupe' pour la table 'groupes')

qui produit cette SQL:

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

Vous pouvez voir que le SQL généré est manquant « companies_groups » entre SUPPRIMER et FROM, et que les qualifications sont sautées (qui signifie « id » sera ambigu).

Permettez-moi de savoir s'il y a des informations supplémentaires que je peux fournir ce serait utile.

Était-ce utile?

La solution

résolu. Plutôt que d'essayer de construire moi-même je joindre utilisé un sous-requête et n'a pas essayé de forcer la doctrine de construire SQL d'une manière spécifique.

Pour toute autre personne qui a besoin jamais faire quelque chose comme ça, voici ce qui a fini par travailler:

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

Vive.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top