Tôi đang cố gắng tìm 'Sản phẩm' theo ID và để trái tham gia tất cả 'Ảnh' trên hai điều kiện: ngôn ngữ và trạng thái hoạt động.Doctrine2 LEFT JOIN với 2 điều kiện
Dưới đây là QueryBuilder tôi:
$queryBuilder = $this->createQueryBuilder('p') ->select('p, photos, photoTranslation') ->leftJoin('p.photos', 'photos') ->leftJoin('photos.translations', 'photoTranslation') ->where('p.id = :id') ->andWhere('(photoTranslation.locale = :locale OR photoTranslation.locale IS NULL)') ->andWhere('(photoTranslation.active = :active OR photoTranslation.active IS NULL)') ->setParameters(array( 'id' => $id 'locale' => $this->getLocale(), 'active' => true ));
Nó hoạt động tốt khi không có hình ảnh hoặc khi có ảnh ACTIVE, nhưng không phải khi có một hình ảnh không hoạt động bởi vì nó không phù hợp với một trong những hai điều kiện.
Nếu tôi sử dụng chỉ với một điều kiện, ví dụ chỉ là phần locale, nó hoạt động tốt:
$queryBuilder = $this->createQueryBuilder('p') ->select('p, photos, photoTranslation') ->leftJoin('p.photos', 'photos') ->leftJoin('photos.translations', 'photoTranslation') ->where('p.id = :id') ->andWhere('(photoTranslation.locale = :locale OR photoTranslation.locale IS NULL)') ->setParameters(array( 'id' => $id 'locale' => $this->getLocale() ));
Còn bây giờ, tôi vòng về đề tài kết quả và unset tất cả các hình ảnh hoạt động ... nhưng Tôi muốn có một cách làm sạch trong QueryBuilder.
Tôi cũng đã cố gắng để đưa các điều kiện về LEFT JOIN khoản:
->leftJoin('photo.translations', 'phototTranslation', Doctrine\ORM\Query\Expr\JOIN::WITH, 'photoTranslation.locale = :locale AND photoTranslation.active = :active')
Nhưng nó luôn luôn trả về hình ảnh, ngay cả khi nó không hoạt động.
Thật không may, cả hai điều kiện "hoạt động" và "miền địa phương" đều được yêu cầu trong trường hợp này. – Tiois
@Tiois Bạn có thể thêm một mẫu nhỏ của mỗi bảng và các kết quả mà bạn đang mong đợi không? Nó có thể giúp bản thân và những người khác thấy được vấn đề tiềm năng tốt hơn. – Shawn
hoặcWhere có thể nhận được kết quả WTF, nó rất khuyến khích để không sử dụng nó. – Hornth