2011-09-23 40 views
12

Đây có lẽ là một cách dễ dàng nhưng tôi không thể tìm ra câu trả lời.Tìm kiếm trong mối quan hệ nhiều-nhiều với Doctrine2

Tôi có một Điều khoản và Điều khoản thực thể đơn giản với nhiều mối quan hệ. Làm thế nào tôi có thể nhận được tất cả các bài viết với một thẻ nhất định (hoặc thẻ)?

cố gắng sau của tôi:

$qb = $repository->createQueryBuilder('a') 
    // ... 
    ->andWhere('a.tags = :tag') 
    ->setParameter('tag', 'mytag') 
    // ... 

hoặc

->andWhere(':tag in a.tags') 
    ->setParameter('tag', 'mytag') 

... đã không làm việc. Cảm ơn!

+0

Mối quan hệ nhiều hoặc nhiều với một chiều hoặc hai chiều? – Problematic

+0

@Problematic: Tôi đã sử dụng ánh xạ một chiều. Điều gì sẽ tốt hơn cho kịch bản của tôi? – Czechnology

+1

Nếu bạn sử dụng ánh xạ hai chiều, bạn có thể thêm phương thức 'getArticles()' vào thẻ của bạn và lấy tập hợp các bài viết bằng cách sử dụng thẻ. – Problematic

Trả lời

39

Và người chiến thắng là ... Đánh trống, xin vui lòng ...

$qb = $repository->createQueryBuilder('a') 
    // ... 
    ->andWhere(':tag MEMBER OF a.tags'); 
    ->setParameter('tag', $tag); 
    // ... 

Nhờ tất cả những người có dành thời gian để đọc và suy nghĩ về câu hỏi của tôi!

+0

Làm việc cho 1 thẻ, nhưng làm thế nào bạn có thể nhận được tất cả các bài viết theo một số thẻ? –

+1

@faost, tôi nghĩ bạn chỉ cần thêm nhiều hơn * trong đó * mệnh đề và nhiều thông số hơn. '...-> andWhere (': tag1 MEMBER OF a.tags') -> setParameter ('tag1', $ tag1) -> vàWhere (': tag2 MEMBER OF a.tags') -> setParameter ('tag2') , $ tag2) -> ...; '. Bạn cũng có thể sử dụng phương thức 'setParameters' để đặt tất cả các tham số cùng một lúc. – Czechnology

+1

Cảm ơn! Chỉ cần đăng chính xác câu hỏi này, nhưng điều này làm việc hoàn hảo – Matt

1

Tôi nghĩ bạn có thể adаpt ví dụ này (từ tài liệu):

$query = $em->createQuery('SELECT u.id FROM CmsUser u WHERE EXISTS (SELECT p.phonenumber FROM CmsPhonenumber p WHERE p.user = u.id)'); 
+0

Tôi không thể làm điều đó để làm việc trong đơn đăng ký của mình. Dù sao cũng cảm ơn bạn! Tôi đã đăng giải pháp cuối cùng của tôi như là một câu trả lời. – Czechnology

+0

Tôi khuyên bạn nên sử dụng QueryBuilder thay vì – user2019515

Các vấn đề liên quan