Как можно использовать построитель запросов с построителем форм Symfony для объединения двух объектов?

$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 рядом с полем = :fie: ошибка: класс App\Entity\Data не имеет поля или ассоциации с именованным полем


person peace_love    schedule 21.10.2019    source источник
comment
Является ли data.field допустимым сопоставленным полем? также проверьте установщики параметров, это ->setParameter('id', 16) без :, то же самое для параметра поля.   -  person yceruto    schedule 21.10.2019
comment
Я бы также сказал, что ваше сообщение об ошибке не соответствует вашему коду.   -  person Jakumi    schedule 21.10.2019
comment
@yceruto Спасибо, это решило проблему! Единственная проблема сейчас в том, что у меня нет данных в моем поле выбора <select> </select>   -  person peace_love    schedule 22.10.2019


Ответы (1)


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

use Doctrine\ORM\Mapping as ORM;

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

Обычно этого было бы достаточно, чтобы доктрина разрешила эту ошибку.

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

It is

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

Вместо

// This is wrong
->setParameter(':field', ...) 
person Julesezaar    schedule 21.10.2019
comment
Спасибо, теперь ошибка исчезла. Но поле выбора теперь пусто <select> </select> - person peace_love; 22.10.2019
comment
Я не думаю, что эта строка также необходима, потому что доктрина обрабатывает это при правильном сопоставлении: -›andWhere('dd.uuid = data.document_id') - person Julesezaar; 22.10.2019