2016-07-30 14 views
0

Ich habe zwei Entitäten (es gibt keine Beziehung zwischen den beiden Entitäten): A: Relation und B: Post. ich jeden Beitrag aus dem aktuellen Benutzer erhalten sie mit diesem Wunsch auf der Homepage anzuzeigen:Symfony: Erstellen Sie einen QueryBuilder zwischen zwei Entitäten ohne Zuordnung

public function getPostsCurrentUser($currentUser) 
{ 
    $qb = $this->createQueryBuilder('p'); 
    $qb->where('p.member = :member') 
     ->setParameters(['member' => $currentUser]) 
     ->orderBy('p.created', 'DESC'); 

    return $qb->getQuery()->getResult(); 
} 

Im Beispiel „A: Relation“ der Benutzer 2 folgen dem Benutzer 1. Wenn ein Benutzer einen anderen Benutzer folgen, Ich möchte auch auf der Homepage jeden Post von Benutzern anzeigen, denen der aktuelle Benutzer folgt. Ich sehe nicht, wie diese Anfrage erstellt wird. Kann mir jemand helfen ?

Dank

Antwort

0

Im Sinne http://sqlfiddle.com/#!9/c5a0bf/2, würde ich so etwas wie die folgenden vorzuschlagen, die eine Unterabfrage verwendet die IDs aller Benutzer auswählen gefolgt:

class PostRepository { 
    public function getPostsOfUser($id) { 
     $query = $this->getEntityManager()->createQuery(
      "SELECT p.content 
      FROM AppBundle:Post p 
      WHERE p.member = :id 
      OR p.memberId IN (
       SELECT r.friend 
       FROM AppBundle:Relation r 
       WHERE r.user = :id 
      ) 
      ORDER BY p.created DESC" 
     ); 

     return $query->setParameter('id', $id) 
        ->getResult(); 
    } 
} 
+0

Hallo chrisp, vielen Dank für Ihre Antwort. Mit dieser Anfrage habe ich ein Syntaxproblem in meiner IDE. Ich habe Ihre Anfrage direkt in phpmyadmin ausprobiert, da ich vermute, dass das $ id-Attribut der aktuelle Benutzer ist und das funktioniert. Ich habe nicht verstanden, warum du die $ id und $ user benutzt hast, kannst du es mir bitte erklären? Entschuldigung, ich bin ein Anfänger mit symfony. – Matthieu

+0

Ich denke, das ist nur falsch, da $ Benutzervariable in dem gegebenen Codebeispiel nicht existiert. Es sollte $ id statt $ user sein. – sanis

+0

Mein Fehler, $ Benutzer ist ein Tippfehler. Fest. – chrisp

Verwandte Themen