2016-05-06 7 views
0

こんにちは私はDoctrineとのSymfonyで左結合を試みています。 私はすでにそれをしようとしましたが、私の試みは失敗しました。 これは実行したいMySQLコードです。DoctrineとSymfonyに左寄せ

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

Entity "Video"では、このように$ albumを定義しました。

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

私はEntityフォルダにVideoRepositoryを作成しました。

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

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

この

はコントローラ部である:「!未定義のメソッド 『VideoLeftJoin』メソッド名findByまたはfindOneByのいずれかで開始する必要があります。」私は はこのエラーを取得する

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

だから私はやってみました"findBy"を追加しても動作しませんでした。

ありがとうございました。

答えて

1

"WITH"が欠けていますか?

YAMLで

:rep​​ositoryClass:

use Doctrine\ORM\Mapping as ORM; 

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

メイクSHUREは、あなたがこの中で、公共の方法をVideoLeftJoin定義:AppBundle\Entity\VideoRepo

注釈に

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

は、リポジトリがある教義を伝える必要がありますVideoRepositoryクラス。

0

doctrineに、対応するエンティティクラスに使用するリポジトリクラスを指定する必要があります。そうでない場合、doctrineはデフォルトのものを使用します。 VideoRepositoryClassNameWithNamespaceリポジトリクラスへのフルパスです

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

VideoエンティティでEntity注釈を変更します。メソッドVideoLeftJoinを自分で定義する必要があります。

また、Database and Doctrinethe Query Builder documentationをチェックしてください。

+0

ありがとう、私はそれを試してみます。 既にドキュメントを読んでいますが、私はいつもそれが意味するものを得ていません:) – Kira

0

以下誤差単に

未定義の方法は、前記 'VideoLeftJoin'。

は、あなたが

findByまたはfindOneByのいずれかで始まる必要があり、メソッド名で事前に定義された方法のいずれかを使用推薦し!機能VideoLeftJoinは、あなたのビデオのリポジトリであることを確認してください

このエラーを解決するために

。以下は、その作成方法の例です。

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