Ich versuche, die Lehre Querybuilder zu verwenden, um die folgende SQL-Abfrage auszuführen:Lehre Querybuilder löschen mit Verknüpfungen
DELETE php FROM product_hole_pattern php
INNER JOIN hole_pattern hp ON php.hole_pattern_id = hp.id
INNER JOIN hole_pattern_type hpt ON hp.hole_pattern_type_id = hpt.id
WHERE php.product_id = 4 AND hpt.slug='universal';
Ich habe diese
$qb = $this->entityManager->createQueryBuilder();
$query = $qb->delete('\SANUS\Entity\ProductHolePattern', 'php')
->innerJoin('php.holePattern', 'hp')
->innerJoin('hp.holePatternType', 'hpt')
->where('hpt.slug = :slug AND php.product=:product')
->setParameter('slug','universal')
->setParameter('product',$this->id)
->getQuery();
aber ich bekomme:
[Semantical Error] line 0, col 50 near 'hpt.slug = :slug': Error: 'hpt' is not defined.
Der DQL, der mit der Fehlermeldung geliefert wird, lautet:
DELETE \SANUS\Entity\ProductHolePattern php
WHERE hpt.slug = :slug AND php.product=:product
So scheinen die Joins komplett ausgelassen zu werden.
Nur zwei Dinge zu erwähnen. 1. Dies kann sehr teuer sein. 2. Wage es nicht, eine solche Logik in einen Controller zu stecken! – EnchanterIO
3. Sache - Dies ist anfällig für Race-Bedingungen. – Kaspars