2011-10-10 38 views
5

Truy vấn của tôi là doctirne 2. tôi có trường trạng thái ở người dùng, riêng tư hoặc công khai. tôi muốn để có thể chạy truy vấn này và hiển thị tất cả các ý kiến ​​ nơi status = công cộng và tư nhân chỉ khi userid = hiện đăng nhập dùng id (mà tôi biết, $ loggerUserVarID)học thuyết 2 - truy vấn có điều kiện của trình tạo truy vấn ... Nếu phát biểu?

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->leftJoin('c.users', 'u') 
      ->where('status = public') ??? display all public comments but private if it belpongs to the logged in user.? 
      ->setParameter(1, $loggerUserVarID) 
      ->getQuery(); 

vào lúc này , tôi đang sử dụng một tuyên bố nếu sau khi tôi nhận được kết quả ngươi, là có một cách để làm một tuyên bố nếu bên trong truy vấn này?

+0

Whats khó chịu: một lời nhận xét có một tài sản người dùng - có nghĩa là nhiều người dùng được ánh xạ tới một bình luận? Những con bò sẽ đi làm? Không thể nhận xét chỉ có một chủ sở hữu (người dùng)? – Max

Trả lời

8

Vì vậy, bạn muốn trả lại Nhận xét "Nếu trạng thái là 'công khai' hoặc ownerId là $ loggedUserVarID", phải không?

Lưu ý rằng nếu $ loggedUserVarID khớp với chủ sở hữu, bạn không thực sự quan tâm đến trạng thái.

Kiểm tra trình truy vấn và tài liệu dql. Họ giải thích khá rõ ràng làm thế nào để đặt cùng nhau phức tạp, nơi điều kiện.

Những gì bạn có thể muốn là một cái gì đó như:

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->join('c.users', 'u') 
      ->where(
       $qb->expr()->orX(
        $qb->expr()->eq('status','public'), 
        $qb->expr()->eq('u.id',$loggedInUser) 
       ) 
      ) 
     ->setParameter(1, $loggerUserVarID) 
     ->getQuery(); 
Các vấn đề liên quan