2016-05-06 17 views
0

Hallo, ich versuche, eine linke Join in Symfony mit Doctrine zu tun. Ich habe es bereits versucht, aber meine Versuche sind fehlgeschlagen. Dies ist der MySQL-Code, den ich ausführen möchte.Links Beitreten in Doctrine und Symfony

SELECT alben.name,alben.alben_id 
FROM alben 
LEFT JOIN video 
ON alben.alben_id =video.album 

In der Entity "Video" definierte ich $ Album so.

/** 
* @var \Contentuser 
* 
* @ORM\ManyToOne(targetEntity="Album") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="album", referencedColumnName="alben_id") 
* }) 
*/ 

Ich habe ein VideoRepository in meinem Entity-Ordner erstellt.

$qm = $this->createQueryBuilder() 
     ->select("alben.name,alben.alben_id") 
     ->from("alben") 
     ->leftJoin("video","video","alben.alben_id =video.album"); 

     return $qm->getQuery()->getResult(); 

Dies ist der Controller-Teil: "! Nicht definierte Methode 'VideoLeftJoin' Der Name der Methode entweder mit findBy oder findOneBy beginnen müssen"

$em=$this->getDoctrine()->getManager(); 
    $videoRepo=$em->getRepository('AppBundle:Video'); 
    $videos=$videoRepo->VideoLeftJoin(); 

ich diesen Fehler bekommen Also habe ich versucht zu tun füge "findBy" hinzu, aber es hat nicht funktioniert.

Vielen Dank im Voraus.

Antwort

1

Vermissen Sie "MIT"?

$qm = $this->createQueryBuilder() 
->select("alben.name","alben.alben_id") 
->from("alben") 
->leftJoin("video","video", "WITH", "alben.alben_id =video.album"); 
return $qm->getQuery()->getResult(); 

Sie haben Lehre zu sagen, dass es Repository:

in yaml: repositoryClass: AppBundle\Entity\VideoRepo

in Anmerkung:

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity(repositoryClass="AppBundle\Entity\VideoRepository") 
*/ 
class Video 
{ 
    //... 
} 

Fabrikat shure Sie definieren VideoLeftJoin Methode als öffentlich in dieser VideoRepository-Klasse.

0

Sie müssen der Doktrin mitteilen, welche Repository-Klasse für die entsprechende Entitätsklasse verwendet werden soll, andernfalls wird die Doktrin ihre Standardklasse verwenden. Ändern Entity Anmerkung im Video Entity:

/** 
* @ORM\Entity(repositoryClass="VideoRepositoryClassNameWithNamespace") 
* @ORM\Table 
*/ 
class Video 
{ 
... 

Wo VideoRepositoryClassNameWithNamespace den vollständigen Pfad zur Repository-Klasse ist. Sie müssen VideoLeftJoin Methode selbst definieren.

Überprüfen Sie auch Database and Doctrine und the Query Builder documentation.

+0

Danke ich werde es versuchen. Bereits die Dokumentation gelesen, aber ich verstehe nicht immer, was sie bedeuten :) – Kira

0

Der Fehler unterhalb der einfach

nicht definierte Methode 'VideoLeftJoin'.

dann sugested Sie eines der vordefinierten Methode verwenden, die

Der Name der Methode ist, muss entweder mit findBy oder findOneBy beginnen!

Um diesen Fehler LÖSEN

stellen sicher, dass die Funktion VideoLeftJoin in Ihrem Video-Repository ist. Im Folgenden finden Sie ein Beispiel für die Erstellung.

public function VideoLeftJoin() 
    { 
    return $this 
     ->createQueryBuilder() 
     ->select("alben.name,alben.alben_id") 
     ->from("alben") 
     ->leftJoin("video","video","alben.alben_id =video.album"); 
     ->getQuery() 
     ->getResult(); 
    }