【问题标题】:symfony2 createQueryBuilder ORDER BY clause is not in SELECT listsymfony2 createQueryBuilder ORDER BY 子句不在 SELECT 列表中
【发布时间】:2017-02-14 02:30:23
【问题描述】:

在我的存储库中使用此代码:

 public function getListAccount($nombreParPage, $page) {
    if ((int) $page < 1) {
        throw new \InvalidArgumentException('L\'argument $page ne peut être inférieur à 1 (valeur : "' . $page . '").');
    }


    $qb = $this->createQueryBuilder('u');
    $qb->join('u.account', 'a');
    $qb->join('a.company','c');
    $qb->where($qb->expr()->like('u.roles', ':param'))
        ->orWhere($qb->expr()->like('u.roles',':param1'))
        ->OrderBy('a.name')
        ->setParameter('param', 'param1')
        ->setParameter('param1','param2');
    $qb->setFirstResult(($page - 1) * $nombreParPage)
        ->setMaxResults($nombreParPage);
    return new Paginator($qb);
}

在我的树枝上

{% for user in users%}
                        <tr>
                            {#   <th scope="row" class="column1"><input type="checkbox"/></th>#}
                            <td class="selectaccount"><input type="checkbox" name="itemlist" value="{{ user.id }}"/>
                            </td>
                            <td>{{ user.account.id }}</td>
                            <td>{{ user.account.company.name }}</td>
                            <td>{{ user.username }}</td>
                            <td>{{ user.account.name }}</td>
                            <td>{{ user.account.lastname }}</td>
                            <td>{{ user.account.credit }}</td>
                            <td>{{ user.account.dateCreation|date('Y-m-d H:i:s') }}</td>
                            <td>{{ user.account.dateExpiration|date('Y-m-d H:i:s') }}</td>

结果是:

**

SQLSTATE[HY000]:一般错误:ORDER BY 子句的 3065 表达式 #1 不在 SELECT 列表中,引用列 'dctrn_result.name_10' 不在 SELECT 列表中;这与 DISTINCT 不兼容")

**

在渲染模板期间抛出异常(“执行 'SELECT DISTINCT id_0 FROM (SELECT u0_.id AS id_0, u0_.username AS username_1, u0_.password AS password_2, u0_.salt AS salt_3, u0_.FieldMail AS FieldMail_4, u0_.FieldFax AS Fie

我正在使用 mysql 5.7,但我不知道我应该做什么:这个脚本适用于我以前的 mysql 版本,但不适用于 mysql 5.7 和 mysql 7

【问题讨论】:

  • 尝试在$qb-&gt;addSelect('a')之前添加?

标签: symfony doctrine-orm


【解决方案1】:

尝试添加列a.name:

$qb = $this->createQueryBuilder('u');
$qb->select('u, a.name');

【讨论】:

  • 当我删除 orderby 时,一切正常,但是当我使用 orderby 时,我得到了同样的错误
【解决方案2】:

在您的查询构建器中,就在您的 -&gt;join() 之后:

$qb = $this->createQueryBuilder('u');
$qb->join('u.account', 'a');
$qb->addSelect('a')  /* add account to your selection */
$qb->join('a.company','c');
$qb->where($qb->expr()->like('u.roles', ':param'))
    ->orWhere($qb->expr()->like('u.roles',':param1'))
    ->OrderBy('a.name')
    ->setParameter('param', 'param1')
    ->setParameter('param1','param2');
$qb->setFirstResult(($page - 1) * $nombreParPage)
    ->setMaxResults($nombreParPage);

【讨论】:

  • 我在twig中添加了我的代码,可以帮助您找出问题
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 2018-03-23
  • 2017-05-18
  • 2013-07-23
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
相关资源
最近更新 更多