2016-03-30 5 views
0

Hallo, ich habe ein logisches Problem in meiner Abfrage Builder-Anfrage, ich muss alle Projektelemente durch Benutzer-ID erhalten, aber wenn das Projekt öffentlich ist (Sichtbarkeit öffentlich) erhalten wir alle Elemente . Es ist einfach, aber die Abfrage gibt nicht alle Projekte zurück.Doktrinabfrage-Generator nicht zurück richtig Antwort beitreten mit Bedingung

Hier ist mein Repository Code

public function getAllIdsByUserIdAndProjectIdQueryBuilder($id_user, $id_project) 
{ 
    $qb = $this->createQueryBuilder('element') 
      ->select('element.id') 
      ->innerJoin('element.project', 'project','with','project.visibility=:visibility') 
      ->innerJoin('project.usersShared', 'user') 
      ->andWhere('project.id = :id_project') 
      ->andWhere('user.id = :id_user') 
      ->setParameter(':id_user', $id_user) 
      ->setParameter(':id_project', $id_project); 
      ->setParameter(':visibility', 'PUBLIC'); 

    return $qb; 
} 
+0

Versuchen Sie, auf die rohen SQL-Abfrage zu denken, dass Sie für diese schreiben würde. Würden Sie Ihre Abfrage aus der Elementtabelle starten, um alle Projekte zu erhalten? – hasumedic

+0

ja es ist das Element Repository, weil ich die Elemente nicht die Projekte bekommen muss, (ein Projekt haben viele Elemente) – Rim

+0

Dann denke ich, ich habe nicht ganz die Frage bekommen. Sie sagen, dass Sie alle Projekte zurück erwarten, aber Sie filtern nach ihnen, so dass Sie nur die Elemente eines Projekts mit öffentlicher Sichtbarkeit erhalten. – hasumedic

Antwort

0

Ich glaube, ich habe es seine eine oderX Bedingung

public function getAllIdsByUserIdAndProjectIdQueryBuilder($id_user, $id_project) 
{ 
    $qb = $this->createQueryBuilder('element') 
      ->select('element.id') 
      ->innerJoin('element.project', 'project') 
      ->leftJoin('project.usersShared', 'user') 
      ->andWhere('project.id = :id_workspace'); 

    $qb->andWhere(
      $qb->expr()->orX(
        $qb->expr()->eq('user.id', ':id_user'), 
        $qb->expr()->eq('project.visibility', ':public_visibility') 
        ) 
      )     
      ->setParameter(':id_user', $id_user) 
      ->setParameter(':public_visibility', 'PUBLIC') 
      ->setParameter(':id_project', $id_project); 

    return $qb; 
}