php - Doctrine 哪里有问题

标签 php mysql doctrine-orm doctrine silex

在我开始之前,我相信我已经尝试了上一篇文章中的所有内容:How to use WHERE IN with Doctrine 2

所以我有一个 Silex 应用程序通过 composer (doctrine/dbal 2.2.*) 使用 Doctrine 连接到 MySQL DB

我尝试运行的查询生成器是这样的:

$qb = $this->db->createQueryBuilder();

$stmt = $qb->select('DAY(datefield1) x, COUNT(*) value')
    ->from('table1', 's')
    ->join('s', 'table2', 't', 't.key=s.key')
    ->where('MONTH(datefield1) = :billMonth')
    ->andWhere('YEAR(datefield1) = :billYear')
    ->andWhere('t.key IN (:keylist)')
    ->groupBy('x')
    ->orderBy('x', 'asc')
    ->setParameter(':billMonth', $month)
    ->setParameter(':billYear', $year)
    ->setParameter(':keylist', implode(",", $keylist))
    ->execute();

return $stmt->fetchAll(\PDO::FETCH_ASSOC);

参数为(month=8)(year=2014)(keylist=array(1,2,3,4))

查询没有失败,但奇怪的是它没有包含它应该包含的所有数据。

我试过 ->setParameter(':keylist', $keylist) 来使用原始数组,但这没有用。

我也尝试过这种语法:

$qb->add('where', $qb->expr()->in('r.winner', array('?1')));

但是这会引发错误,因为 in 方法在表达式构建器类中不可用。

请有人关注一下,让我不必对 SQL 进行硬编码?

最佳答案

好吧,自从我上次查看以来,这个旧线程已经看到了一些 Action ,我想确认这个问题早已解决 - setParameter 中的第三个参数允许您通知 Doctrine 如何处理数组:

    $qb = $this->db->createQueryBuilder();

    $stmt = $qb
        ->select('*')
        ->from(self::DB_TABLE, 'x')
        ->where('x.service IN (:services)')
        ->orderBy('x.session_end', 'DESC')
        ->addOrderBy('x.direction', 'DESC')
        ->setParameter(':services', $services, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
        ->setFirstResult($offset)
        ->setMaxResults($count)
        ->execute();

    $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);

关于php - Doctrine 哪里有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791282/

相关文章:

php - 环境变量和 artisan 不适用于生产服务器

php - 将图像上传到远程服务器。 PHP

php - 从sql中提取记录到表中

doctrine-orm - doctrine 2 oracle datetime 列在插入实体上显示 "not a valid month"

symfony - 如何在 DQL 中按 NULL 排序?

php - SQL - 执行此查询的最有效方式?

php - mysqli查询(选择)不起作用(选择)php

php - 准备好的查询无法运行 PHP

mysql - 为什么 Node.js 无法连接到我的数据库?

php - 在 Doctrine 的 QueryBuilder 中使用嵌套查询和多对多关系