Запрос в Sonata Admin

Я использую Sonata для создания бэк-офиса, а в configureFormFields я хочу выполнить запрос, чтобы вернуть некоторые значения. Запрос выполнен хорошо и возвращает значения, когда я использую var_dump, но в форме я всегда получаю «Класс не существует». Вы можете помочь мне?

Вот код:

protected function configureFormFields(FormMapper $formMapper)
{
      /* @var $queryBuilder \Doctrine\ORM\QueryBuilder */
    $queryBuilder = $this->getModelManager()
            ->getEntityManager('EBCoreKernelBundle:Campaign\Campaign')
            ->createQueryBuilder();

    $queryBuilder->select('cmp.id, cmp.name')
                 ->from('EBCoreKernelBundle:Campaign\Campaign', 'cmp');

          /* @var $templateList Template[] */
    $templateList = $queryBuilder->getQuery()->execute();

         var_dump($templateList);

    $formMapper
        ->add('name','sonata_type_model',  array('required' => true, 'query' => $queryBuilder));


}

person peterfigwall    schedule 22.11.2013    source источник
comment
Какая у вас ошибка? т.е. какой класс не существует?   -  person Jon Winstanley    schedule 22.11.2013
comment
может быть проблема с ->from('EBCoreKernelBundle:Campaign\Campaign', 'cmp'); этой строкой. используйте ->from('EBCoreKernelBundle:Campaign', 'cmp');, если ваша сущность Campaign находится в папке Entity EBCoreKernelBundle   -  person bsnrijal    schedule 22.11.2013
comment
@bsnrijal это не сработало   -  person peterfigwall    schedule 25.11.2013
comment
@JonWinstanley, я не знаю. Это только говорит, что класс не существует   -  person peterfigwall    schedule 25.11.2013
comment
вы получаете список шаблонов, и я думаю, вы хотите отобразить список шаблонов в formmapper. Попробуйте использовать: ->add('name','sonata_type_model', array('required' => true, 'class'=> 'EBCoreKernelBundle:Campaign\Campaign','property'=> 'Your property name', 'query_builder' => $templateList));   -  person bsnrijal    schedule 25.11.2013
comment
@bsnrijal я нашел другой способ сделать это с помощью контроллера и некоторых дополнительных объектов. Спасибо, в любом случае   -  person peterfigwall    schedule 26.11.2013


Ответы (2)


$entity = новый \Nnx\AbpBundle\Entity\Truc();

$query = $this->modelManager->getEntityManager($entity)->createQuery('SELECT t FROM Nnx\AbpBundle\Entity\Truc t ORDER BY t.lib ASC')->execute();

person PrinceLu    schedule 23.07.2014
comment
Вы должны немного развить свой ответ, а не просто код без контекста. - person avcajaraville; 23.07.2014

В качестве документации:

https://sonata-project.org/bundles/admin/master/doc/reference/form_types.html

запрос по умолчанию имеет значение null. Вы можете установить это на экземпляр QueryBuilder, чтобы определить пользовательский запрос для получения доступных параметров.

Итак, давайте добавим ему построитель запросов:

        $queryBuilder = $this->getModelManager()
           ->getEntityManager(Category::class)
           ->createQueryBuilder('c')
           ->select('c')
           ->from('AppBundle:Category', 'c')
           ->orderBy('c.title', 'ASC')
        ;

        $formMapper->add('toto', ModelType::class, array(
           'query' => $queryBuilder
        ))
person Thomas Decaux    schedule 26.04.2018