首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2 notIn不工作

Symfony2 notIn不工作
EN

Stack Overflow用户
提问于 2014-07-25 09:02:03
回答 1查看 68关注 0票数 0

我试图使用带有query_builder子句的notIn。但是它不起作用,我有一条错误消息:

代码语言:javascript
复制
Call to a member function expr() on a non-object in C:\wamp\www\projet\src\Intranet\UserBundle\Entity\UserRepository.php line 301

这是一种方法:

代码语言:javascript
复制
    public function employesSansCongesAllouesEn($annee) {
    $nots = $this->createQueryBuilder('u') // récupérer les employés qui ont déjà des congés définis
            ->select('u.id')
            ->Join('\Intranet\CalendrierBundle\Entity\UserCongeByYear', 'uc', "WITH", "uc.user = u.id ") // jointure UserCongeByYear
            ->andWhere('u.enabled = 1 ')
            ->andWhere('uc.annee = :annee ') // condition d'année
            ->getDQL()
    ;
    $qb = $this->createQueryBuilder('user') // récupérer les employés qui n'ont pas encore de congé pour l'année choisie
            ->andWhere('user.enabled = 1')
            ->distinct('user')
            ->andWhere($qb->expr()->notIn('user.id', $nots)) // condition NOT IN
            ->setParameter(':annee', $annee)
            ->orderBy('user.nom', 'ASC')
    ;
    return $qb;
}

以及使用此查询的表单:

代码语言:javascript
复制
    public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
            ->add('users', 'entity', array(
                'label' => "Employés : ",
                'class' => 'IntranetUserBundle:User',
                'multiple' => false,
                'required' => true,
                'attr' => array('class' => 'form-control'),
                'query_builder' => function(UserRepository $er) use($options) {
            return $er->employesSansCongesAllouesEn($options['annee']);
        }
            ))
            ->add('heures', 'integer', array(
                'label' => "Nombre d'heures attribuées : ",
                'attr' => array('class' => 'form-control', 'min' => 1, 'max' => '250')
            ))
    ;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-25 09:11:24

在声明$qb之前,您正在使用它。

您应该声明它,然后在之后的查询构建过程中使用它,比如..

代码语言:javascript
复制
$qb = $this->createQueryBuilder();

// récupérer les employés qui ont déjà des congés définis
$nots = $qb
    ->select('u.id')
    ->Join(
        '\Intranet\CalendrierBundle\Entity\UserCongeByYear', 
        'uc', 
        "WITH", 
        "uc.user = u.id "
    ) // jointure UserCongeByYear
    ->andWhere('u.enabled = 1 ')
    ->andWhere('uc.annee = :annee ') // condition d'année
    ->getDQL()
;

// récupérer les employés qui n'ont pas encore de congé pour l'année choisie
return $qb
    ->where('user.enabled = 1')
    ->distinct('user')
    ->andWhere($qb->expr()->notIn('user.id', $nots)) // condition NOT IN
    ->setParameter(':annee', $annee)
    ->orderBy('user.nom', 'ASC')
;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24951922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档