2017-02-22 67 views
0

在光電測試中有一個投票具有「imageId」字段的實體。使用連接時的原則查詢生成器錯誤

我想得到一個查詢,其中包含投票ID和投票ID攜帶的圖像的文件名。 實體看起來是這樣的:

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'

但除去排序依據後,我得到這樣的結果

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

我知道,錯誤鏈接的事實,我沒有使用內加入WITH PARAM,但想這個工作100%好,並完全通過docrine關係。

Whay可能是問題,我該如何解決它?

+1

- >加入( 'v.imageId', 'I') – LBA

+0

@LBA'錯誤:類的appbundle \實體\投票沒有協會命名imageId' – aln447

回答

0

我想這是因爲在你的實體,您的圖像標識字段中學說定義了兩次:

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

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

您必須刪除第一個(@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) –