2016-11-08 5 views
0

Ich habe eine Select-Abfrage und ich versuche, eine Verknüpfung hinzuzufügen.Wie wird ein Join für zwei Entitäten in Symfony und Doctrine durchgeführt?

Im Beispiel unten, ich habe eine Question Einheit, die ich verwende, um einige Ergebnisse zurück, und ich mag mit der User Einheit eine Verknüpfung zu verwenden, wie:

SELECT question FROM question AS q LEFT JOIN USER u ON q.user_id= u.id;

ich das Ergebnis möchte um eine User Einheit innerhalb einer Question Einheit, so etwas wie:

private Question (entity) 
private id 
private user_id 
private User (entity) 
    private id 
    private name 

hier ist meine Klasse

namespace AppBundle\Repository; 

use AppBundle\Entity\User; 
use AppBundle\Entity\Question; 
use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\Tools\Pagination\Paginator; 

class QuestionRepository extends EntityRepository 
{ 

    /** 
    * @param int $currentPage 
    * 
    * @return Paginator 
    */ 
    public function getQuestions($currentPage = 1) 
    { 
     $questions = $this->createQueryBuilder('question') 
      ->where('question.active is NULL') 
      ->getQuery(); 

     $paginator = $this->paginate($questions, $currentPage); 

     return $paginator; 
    } 
} 

Ich nenne es wie dieses

$questionRepo = $this->container->get('doctrine')->getManager()->getRepository('AppBundle:Question'); 
$questions = $questionRepo->getQuestions(1); 

Irgendwelche Ideen?

Antwort

0

Wie wäre das:

$questions = $this->createQueryBuilder('question') 
    ->leftJoin('question.user', 'question_user', 'WITH', 'question_user.user = :user_id') 
    ->where('question.active is NULL') 
    ->setParameter('user_id', $user_id) 
    ->getQuery(); 

$paginator = $this->paginate($questions, $currentPage); 

Edit: Aufgrund Ihrer neuesten Kommentare, ich habe zu erwähnen, dass dieser Vorschlag geht davon aus, dass Ihre Question Einheit sieht wie folgt aus (nach User ‚s Einheit:

/** 
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="question") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
private $user; 

Wenn nicht, diese hinzufügen, erzeugen Entitäten (php app/console doctrine:generate:entities AppBundle:Question) und Update-DB (php app/console doctrine:schema:update --force).

PS: Bevor Sie Entitäten generieren, müssen Sie alte Getter/Setter entfernen.

+0

Ich bekomme '[Semantische Fehler] in der Nähe von 'Frage_Benutzer': Fehler: Klasse AppBundle \ Entität \ Frage hat keine Assoziation namens Benutzer' – Patrioticcow

+0

Ich denke, ich muss der' Frage'-Entität, die ich eine 'User' Entität haben – Patrioticcow

Verwandte Themen