6
votes

Doctrine QueryBuilder où en collection

sur mon entité, j'ai une collection de tableau d'utilisateurs xxx pré>

dans mon formelype, je veux filtrer ces groupes dans laquelle l'utilisateur actuel est membre: p> xxx

Mon problème est évidemment sur cette ligne: p>

$qb->where(':user IN (g.users)');


1 commentaires

Salut! Pouvez-vous essayer d'utiliser dans expression comme ceci: $ qb-> où ($ qb-> expr () -> in ('g.utilisateur, $ utilisateur));


3 Réponses :


0
votes
$qb->expr()->in('u.id', array(1, 2, 3))

0 commentaires

3
votes

Essayez ci-dessous le code xxx

Je l'ai essayé dans symfony 2.3 avec doctrine2 . Vous pouvez utiliser la fonction SELECT avec CreateEquéryBuilder () pour obtenir des colonnes spécifiques.


0 commentaires

0
votes

J'ai fini par tourner un peu après une tentative sans succès de vos solutions. J'ai créé manuellement un tableau des identifiants que je voulais.

Il y a probablement une manière native de faire cela, semble être une jolie chose standard ... cela fonctionne cependant. P>

// 1. to inject user entity into this builder first make a construct function (remember to inject it from controller!)

function __construct($user)
{
    $this->user = $user;
}

/**
 * {@inheritdoc}
 */


public function buildForm(FormBuilderInterface $builder, array $options)
{
    $user = $this->user; // 2. instantiate the variable we created in our construct above

    //create group list array
    $groupList = $this->user->getACRGroups();
    $gla = array(); 
    foreach ($groupList as $g) {
        $gla[] = $g->getId();
    };

    $builder
    ->add('acr_group', EntityType::class, array(
        'label' => 'ATS',
        'class' => 'HazardlogBundle:ACRGroup',
        'query_builder' => function (EntityRepository $er) use ($gla) { // 3. use the user variable in the querybilder
                $qb = $er->createQueryBuilder('g');
                $qb->where('g.id IN (:gla)');
                $qb->setParameters( array('gla' => $gla) );
                $qb->orderBy('g.name', 'ASC');
                return $qb;
        },
        'choice_label' => 'name'
    ))


0 commentaires