2017-02-22 9 views
0

photocontestに「imageId」フィールドを持つエンティティ投票があります。結合を使用するときにDoctrine Query builderエラー

投票IDと投票IDを含む画像のfileNameを含むクエリを取得したいと考えています。 エンティティ次のようになります。

class Vote 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    public $id; 
    /** 
    * @ORM\Column(type="integer", name="image_id") 
    * @var integer $imageId 
    * @ORM\ManyToOne(targetEntity="Image") 
    * @ORM\JoinColumn(name="image_id", referencedColumnName="id") 
    */ 
    protected $imageId; 

    /** 
    * @ORM\Column(type="datetime", name="date") 
    */ 
    protected $date; 

と画像これを好きにリンクされています

class Image { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    public $id; 
    /** 
    * @ORM\Column(type="string", length=255, name="file_name") 
    * @var string $fileName 
    */ 
    protected $fileName; 

は今、私はこのクエリビルダを使用して結果を取得しようとしていた。

$votes = $qb -> select("v.id, i.fileName, v.date") 
    ->from("AppBundle:Vote", "v") 
    ->join("AppBundle:Image", "i") 
    ->orderBy("v.id", "DESC") 
    ->getQuery(); 

この設定で使用すると、次のエラーが表示されます。

Expected Literal, got 'BY'

しかしORDERBYを削除した後、私はこの結果

Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got end of string.

を取得し、私は私が参加内側WITHのparamを使用していないが、これは100%に働きたいという事実に誤りリンクことを認識していますそれはドクリンの関係を完全に貫いています。

ホワイが問題になる可能性がありますが、どうすれば修正できますか?

+1

- >参加( 'v.imageId'、 'I') – LBA

+0

@LBA 'エラー:クラスAppBundle \エンティティ\投票は、これはそうimageId' – aln447

答えて

0

私はあなたのエンティティでは、あなたのIMAGEIDフィールドは教義に二回定義されているからだと思う:

@ORM\Column(type="integer", name="image_id") 

@ORM\JoinColumn(name="image_id", referencedColumnName="id") 

あなたが最初の1 を削除する必要があります(@ORMの\コラム)は、その結合関係からです。

/** 
* @var Image 
* 
* @ORM\ManyToOne(targetEntity="Image") 
* @ORM\JoinColumn(name="image_id") 
*/ 
protected $image; 

あなたはそれ以上を必要としません:

プラス、あなたはそれをこのように定義されなければなりません。

そして、あなたのVoteRepo中:

$qb = $qb = $this->createQueryBuilder('v') 
    ->select('v.id, i.fileName, v.date') 
    ->join('v.image', 'i') 
    ->orderBy('v.id', 'DESC'); 
+0

という名前の関連性を持っていませんワーキング。テストのためにmysqlの要素を手動でデータベースに追加する最良の方法は何ですか?私のデータを削除しなければならなかったので – aln447

+0

あなたはそれに対して什器を使うことができます:[http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html](http://symfony.com/doc/current/bundles /DoctrineFixturesBundle/index.html) –

関連する問題