Как использовать построитель запросов с Symfony formbuilder для объединения двух сущностей? - PullRequest
0 голосов
/ 21 октября 2019

Моя таблица базы данных "документы":

id  uuid        timestamp               name           pages    
86  37a4a52951  2019-10-18 18:13:08     something1     9    
87  g4fbc106ab  2019-10-18 18:18:46     something2     23   
91  77d2fde844  2019-10-21 15:58:37     Blue           16   
92  9f05834314  2019-10-21 15:58:52     Black          16   
93  9a7d8e32b2  2019-10-21 16:00:20     Orange         16   
94  32b38338a1  2019-10-21 17:13:18     test           3    

Моя таблица базы данных "данные":

id      uuid        content     field   document_id
805     14cc8a5e48  Baloons        35   77d2fde844
806     6a0c9dfcc1  Bob            81   77d2fde844
807     c9061ea3e0  Fairytales     35   9f05834314
808     ed5cbb124a  Alan           81   9f05834314
809     59f33d724c  Dreams         35   9a7d8e32b2
810     b8c0fc2f6f  Oliver         81   9a7d8e32b2
811     8fad6b9334  Banana         85   4fc75ebbdf

С помощью formbuilder и построителя запросов я пытаюсь создать поле выбора со всеми даннымиэто связано с документом со страницей 16 и полем 35.

Вывод, который я пытаюсь напечатать, таков:

 <select>
  <option value="91">Baloons</option>
  <option value="92">Fairytales</option>
  <option value="93">Dreams</option>
</select> 

Это мой подход:

$options['class'] = 'App\\Entity\\Data';
$options['attr'] = array('class' => 'form-control select2');
$options['query_builder'] = function (EntityRepository $er) use ($fieldId,$documentId) {
    return $er->createQueryBuilder('data')
        ->leftJoin('data.documents', 'dd')
        ->andWhere('dd.pages = :id')
        ->andWhere('dd.uuid = data.document_id')
        ->andWhere('data.field = :field')
        ->setParameter(':id', 16)
        ->setParameter(':field', 35)
     ;
};
$options['choice_label'] = 'content';

Сообщение об ошибке:

[Семантическая ошибка] строка 0, столбец 127 рядом с 'field =: fie': Ошибка: Class App \ Entity \ Data не имеет поля или ассоциацииименованное поле

1 Ответ

1 голос
/ 21 октября 2019

Есть ли в вашем классе следующее?

use Doctrine\ORM\Mapping as ORM;

class Data
{
    /**
     * @ORM\Column(name="field")
     */
    private $field;
}

Обычно этого достаточно, чтобы доктрина исправила эту ошибку

  • И, как говорит @yceruto в комментариях

Это

// This is right
->setParameter('field', 22)

Вместо

// This is wrong
->setParameter(':field', ...) 
...