Tôi đang cố gắng sử dụng các học thuyết QueryBuilder để thực hiện các truy vấn SQL sau:thuyết QueryBuilder xóa với tham gia
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';
Tôi có điều này
$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();
nhưng tôi nhận được:
[Semantical Error] line 0, col 50 near 'hpt.slug = :slug': Error: 'hpt' is not defined.
DQL đi kèm với thông báo lỗi là:
DELETE \SANUS\Entity\ProductHolePattern php
WHERE hpt.slug = :slug AND php.product=:product
Vì vậy, các tham gia dường như bị bỏ qua hoàn toàn.
Chỉ cần hai điều cần đề cập. 1. Điều này có thể rất tốn kém. 2. Đừng dám đặt một logic như vậy vào một bộ điều khiển! – EnchanterIO
Điều thứ 3 - Điều này dễ bị điều kiện chạy đua. – Kaspars