误解学问查询生成器

时间:2018-12-20 15:09:20

标签: php symfony doctrine

我误解了教义查询生成器获得了意想不到的结果。

第一时间我用它来获取ID:

来自BannerRepository类:

$this->createQueryBuilder('e')->select('b.id as bid')->from('AppBundle\Entity\Banner', 'b')->getQuery()->execute();

我得到16条重复的记录,而在数据库中只有4条。 好的,我添加了->select('distinct(b.id) as bid'),就可以解决问题。

但是第二次,我使用where子句按布尔值过滤记录。

$shownLast = $this->createQueryBuilder('e')->from('AppBundle\Entity\Banner', 'b')
->where('b.shownLast = 1')->getQuery()->getResult();

获取所有记录,无论记录是否接受。

请帮助,也许我在教义用法上错了。

2 个答案:

答案 0 :(得分:0)

在BannerRepository中,您不必使用from函数,因为它已经是Banner实体的存储库。 createQueryBuilder函数的第一个参数是横幅的别名。使用类似这样的内容:

Optional<Application> application = this.applicationDao.findById(id);
    application.map(app -> Pair.of(app, Optional.ofNullable(app.getQuotes())))
        .filter(quote -> quote.getValue().isPresent())
        .map(quote -> quote.getValue().get().stream().map(q -> Pair.of(quote.getKey(), q)));

答案 1 :(得分:0)

有一个DQL查询示例,其中包含选择,条件和排序依据:

$variable=$request->get('variable');
$query = $em->createQuery(
        'SELECT b.id FROM App\Entity\Banner b 
                  WHERE b.showLast = TRUE                        
                  AND                      
                  b.someField = :dinamicVariable                      
                  ORDER BY u.name ASC'
    )->setParameters([
        'dinamicVariable' => '%' . $variable. '%',            
    ]);