は、私は次のSQLクエリを実行するために教義QueryBuilderを使用しようとしている加入:教義QueryBuilderはして削除
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';
私はこの
$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();
を持っていますが、私が手:
[Semantical Error] line 0, col 50 near 'hpt.slug = :slug': Error: 'hpt' is not defined.
エラーメッセージに付属するDQLは、
です。DELETE \SANUS\Entity\ProductHolePattern php
WHERE hpt.slug = :slug AND php.product=:product
したがって、結合は完全に省略されているようです。
言及しておきたいことは2つだけです。これは非常に高価なことがあります。 2.コントローラにそのようなロジックを入れることを敢えてしないでください! – EnchanterIO
第3のもの - これは競争条件になりがちです。 – Kaspars