2017-02-22 59 views
0

В фотоконкурсе есть голос объект с полем «imageId».Ошибка построения ошибки запроса Doctrine при использовании объединений

Я хотел бы получить запрос, содержащий идентификатор голосования и имя файла изображения, которое Идентификация имеет. Лицо выглядит следующим образом:

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 параметров внутри объединения, но хотелось бы, чтобы это работало 100% хорошо, и это полностью зависит от диклонических отношений.

Может быть, проблема и как ее исправить?

+1

-> Join ('v.imageId', 'я') – LBA

+0

@LBA 'Ошибка: Класс AppBundle \ Entity \ Vote не имеет связи с именем imageId' – aln447

ответ

0

Я думаю, это потому, что в вашей организации, ваше поле ImageID определяется дважды в учении:

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

и

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

Вы должны удалить первый один (@ORM \ Column) с момента соединения.

Кроме того, вы должны определить это следующим образом:

/** 
* @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) –

 Смежные вопросы

  • Нет связанных вопросов^_^