2016-10-05 6 views
1

Haben Sie ein Problem mit Unterabfrage mit Symfony.Symfony Unterabfrage für Entität

Was ich versuche zu tun - Ich habe eine Tabelle mit Benutzern und eine Tabelle mit Posts.

Posts     Users 
id|author|content  id|username 

Ich möchte Unterabfrage erstellen, um Benutzername nach ID zu erhalten.

/** 
* @return array 
*/ 
public function findAll() 
{ 
    return $this->getEntityManager()->createQuery(
     'SELECT a, (SELECT u.username 
     FROM BackendBundle:User u WHERE u.id = a.author) as authorName 
     FROM BackendBundle:Article a' 
    )->getResult(); 
} 

Ergebnis:

enter image description here

Was mache ich falsch? Was ist der beste Weg, um Spalte von anderen Tabelle nach ID zu verbinden? Vielleicht kann ich Anmerkungen verwenden?

Thx für jede Hilfe.

+0

Prüfung der doc über die Joins: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/ dql-doctrine-query-language.html # verbindet – olibiaz

Antwort

-1

Sie benötigen hier keine Unterabfrage, was Sie brauchen, ist ein einfacher (INNERER) JOIN, um Benutzer mit ihren Artikeln zu verbinden.

$em->createQuery("SELECT a FROM Article JOIN a.author'"); 

Sie haben nicht einmal eine on-Klausel in Ihrem müssen beitreten, weil Lehre bereits (durch Anmerkungen auf Ihre Entitäten oder eine separate yaml Datei) sollte wissen, dass das article.author Feld user.id. bezieht

Edit:

Ich gehe davon aus Sie einen Benutzer Einheit haben, die One-To-Many im Zusammenhang mit dem Artikel Einheit ist.

class User 
{ 
    // ... 
    /** 
    * @OneToMany(targetEntity="Article", mappedBy="author") 
    */ 
    private $articles; 
    // ... 
} 

class Article 
{ 
    // ... 
    /** 
    * @var User 
    * @ManyToOne(targetEntity="User", inversedBy="articles") 
    */ 
    private $author; 
    // ... 
} 

Siehe Lehren Assoziationskartierung Dokumentation: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

+0

Können Sie ein Beispiel für Annotation zeigen? – Tapakan

+0

Ich möchte nur eine Spalte Benutzername aus Benutzer Tabelle beizutreten. Um den Autor des Artikels anzuzeigen. – Tapakan

+0

Sie möchten sagen, dass ich nur ganze Entität beitreten kann aber nicht nur einer Spalte beitreten und Wert aus dieser Spalte an die Eigenschaft in einer anderen Entität binden kann? – Tapakan

Verwandte Themen