2017-02-17 28 views
0

У меня проблема с моим FormType. Я хочу отображать данные и благодарность разработчику запроса делают различие. Проблема, когда я вызываю свой метод с помощью -> select ('t.nomVern'), у меня есть «Warning: spl_object_hash() ожидает, что параметр 1 будет объектом, строка -« как сообщение об ошибке ».Репозиторий FormType & method

Я не понимаю, почему.

Моего FormType ObservationType:

<?php 

namespace ObservationBundle\Form; 

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\DateType; 
use Symfony\Component\Form\Extension\Core\Type\HiddenType; 
use Symfony\Component\Form\Extension\Core\Type\IntegerType; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Vich\UploaderBundle\Form\Type\VichImageType; 
use ImportBundle\Repository\TaxrefRepository; 
use ImportBundle\Entity\Taxref; 

class ObservationType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('date', DateType::class, array(
       'widget' => 'single_text', 
       'html5' => false, 
       'attr' => array(
        'placeholder' => 'Choisir la date de l\'observation', 
       ) 
      )) 
      ->add('latitude', TextType::class, array(
       'attr' => array(
        'placeholder' => 'Latitude ex : 31.85322' 
       ) 
      )) 
      ->add('longitude', TextType::class, array(
       'attr' => array(
        'placeholder' => 'Longitude ex : 33.55555' 
       ) 
      )) 
      ->add('nombre', IntegerType::class) 

      ->add('imageFile', VichImageType::class, array(
       'required' => false, 
       'allow_delete' => false, // not mandatory, default is true 
       'download_link' => false, // not mandatory, default is true 
       'attr' => array(
        'placeholder' => 'Votre image' 
       ) 
      )) 
      ->add('valide', HiddenType::class) 
      ->add('commentaire', HiddenType::class) 
      ->add('gpsAffiche', HiddenType::class) 
      ->add('meteo', HiddenType::class) 
      ->add('saison', HiddenType::class) 
      ->add('typeSaisie', HiddenType::class) 
      ->add('precipitation', HiddenType::class) 
      ->add('periode', HiddenType::class) 
      ->add('environnement', HiddenType::class) 
      ->add('sensibilite', HiddenType::class) 
      ->add('comportement', HiddenType::class) 
      ->add('species', EntityType::class, array(
       'label' => 'Espèce observée :', 
       'class' => 'ImportBundle\Entity\Taxref', 
       'choice_label' => 'nomVern', 
       'query_builder' => function(TaxrefRepository $qb){ 
        return $qb->distinctTaxref(); 
       } 
      )) 
     ; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'ObservationBundle\Entity\Observation' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getBlockPrefix() 
    { 
     return 'observationbundle_observation'; 
    } 


} 

И мой репозиторий:

<?php 

namespace ImportBundle\Repository; 

use Doctrine\DBAL\Query\QueryBuilder; 
use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\Tools\Pagination\Paginator; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

class TaxrefRepository extends EntityRepository 
{ 
    /** 
    * Pagination liste des especes 
    * @param int $page 
    * @param int $max 
    * @return Paginator 
    */ 
    public function findByPage($page = 1, $max = 8) 
    { 
     if(!is_numeric($page)) { 
      throw new \InvalidArgumentException(
       '$page must be an integer ('.gettype($page).' : '.$page.')' 
      ); 
     } 

     if(!is_numeric($page)) { 
      throw new \InvalidArgumentException(
       '$max must be an integer ('.gettype($max).' : '.$max.')' 
      ); 
     } 

     $dql = $this->createQueryBuilder('t'); 
     $dql->orderBy('t.id', 'DESC'); 

     $firstResult = ($page - 1) * $max; 

     $query = $dql->getQuery(); 
     $query->setFirstResult($firstResult); 
     $query->setMaxResults($max); 

     $paginator = new Paginator($query); 

     if(($paginator->count() <= $firstResult) && $page != 1) { 
      throw new NotFoundHttpException('Page not found'); 
     } 

     return $paginator; 
    } 

    /** 
    * @return \Doctrine\ORM\QueryBuilder 
    */ 
    public function distinctTaxref() 
    { 


     return $this 
      ->createQueryBuilder('t') 
      ->select('t.nomVern') 
      ->distinct(true) 
      ->orderBy('t.nomVern', 'ASC'); 

    } 
} 

Заранее спасибо за вашу помощь и извините за мой плохой английский:/

ответ

0

Попробуйте эту часть коды

return $this 
     ->createQueryBuilder('t') 
     ->select(array('t.nomVern')) 
     ->distinct(true) 
     ->orderBy('t.nomVern', 'ASC'); 
+0

Благодарим вас за ответ. То же сообщение об ошибке :( –

0

Я считаю, что, поскольку вы используете EntityType, Symfony ожидает иметь массив объектов, тогда как вы выбираете один столбец, который создает массив строк.

Вы можете попробовать выбрать объект в целом:

return $this 
    ->createQueryBuilder('t') 
    ->select('t') 
    ->distinct(true) 
    ->orderBy('t.nomVern', 'ASC'); 

ли эта работа?

+0

Здравствуйте, У меня больше нет сообщения об ошибке. С другой стороны, различие не работает. У меня такой же результат без query_builder –