【问题标题】:BETWEEN condition select only single row Symfony2BETWEEN 条件仅选择单行 Symfony2
【发布时间】:2015-02-17 07:34:23
【问题描述】:

输入:

:startPrice = 180
:targetPrice = 300

在数据库中,我有一个价格列,需要找到价格列位于 180 和 300 之间的所有行。

数据库中的价格值:

 price = 270
 price = 278

那么我们如何才能看到我在下面写的查询必须获取这两个行,但我只得到第一个(270)。

有人能解释一下为什么 BETWEEN 条件只从数据库中获取一行吗?这是数据库查询生成器:

$query = $result = $this->getEntityManager()
        ->createQueryBuilder()
        ->select('t')
        ->from('VputiTripBundle:Trip', 't');
             $query
               ->andWhere('t.price > :startPrice')
                ->andWhere('t.price < :targetPrice');
            $parameters = [
                'startPrice' => $startPrice,
                'targetPrice' => $targetPrice,
            ];
        $query->setParameters($parameters)
        ->setMaxResults(10)
        ->getQuery()
         ->getResult();

查询字符串:

'SELECT t FROM VputiTripBundle:Trip t WHERE t.price > :startPrice AND t.price < :targetPrice'

【问题讨论】:

  • 您确定数据库中有更多应该匹配的数据吗?此外,您没有为查询设置参数
  • 数据库中的两行价格分别为 270 和 278。我找到了 beetwen 250 和 300。
  • 如果你让“MaxResults”选项退出,结果是什么?
  • @KhorneHoly,同样...数组中的单个元素(对象)
  • 这真的很奇怪.. 价格是否存储为integer?您是否将参数指定为string?否则我会通过 symfony2 或 Doctrine 的 github 提出问题

标签: php symfony doctrine query-builder


【解决方案1】:

试试这样:

$queryBuilder = $this->getEntityManager()->createQueryBuilder();

$query = $queryBuilder
        ->select('t')
        ->from('VputiTripBundle:Trip', 't')
        ->where($queryBuilder->expr()->between('t.price', ':startPrice', ':targetPrice'))
        ->setParameters([
            'startPrice' => $startPrice,
            'targetPrice' => $targetPrice
        ])
        ->getQuery();

        $query->setMaxResults(10);

        return $query->getResult();

【讨论】:

  • 我已经尝试过这样的事情,但仍然从数据库中获取唯一的(第一)行。
  • @Panzer_Commander 我认为你也应该发布你的表结构、实体结构和操作/管理器。我确定问题不在数据库查询中。
  • 没有必要)我通过清除缓存、删除模式、创建、更新它来重新加载我的项目,一切正常!我不知道怎么做,但是...谢谢大家)
猜你喜欢
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2014-02-18
  • 2022-06-14
相关资源
最近更新 更多