小编Des*_*ane的帖子

Doctrine Querybuilder ORDER BY子句不在SELECT列表中

我有以下查询构建器:

$queryBuilder = $this
    ->createQueryBuilder('recipient')
    ->leftJoin('recipient.message', 'message')
    ->orderBy('message.dateSent', 'DESC');
Run Code Online (Sandbox Code Playgroud)

这一直很好:)但是因为升级到Mysql 5.7我已经开始在任何地方得到这个错误:

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

我已经在大多数使用DBAL图层的地方解决了这个问题,只需将项目添加到选择列表中,但我无法弄清楚如何使用此特定功能queryBuilder.

mysql symfony doctrine-orm

11
推荐指数
2
解决办法
1万
查看次数

Symfony2 - 在开发模式下从请求EventListener重定向响应,同时忽略内置请求事件

我正在Symfony2中构建自己的用户管理系统(不使用FOSUserBundle),并希望能够强制用户更改其密码.

我已经设置了一个EventListener来监听kernal.request事件,然后我在监听器中执行一些逻辑来确定用户是否需要更改密码; 如果他们这样做,那么他们将被重定向到"更改密码"路线.

我将服务添加到我config.yml的监听kernal.request:

password_change_listener:
    class: Acme\AdminBundle\EventListener\PasswordChangeListener
        arguments: [ @service_container ]
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onMustChangepasswordEvent }
Run Code Online (Sandbox Code Playgroud)

然后是听众:

public function onMustChangepasswordEvent(GetResponseEvent $event) {

  $securityContext = $this->container->get('security.context');

  // if not logged in, no need to change password
  if ( !$securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED') )
    return;

  // If already on the change_password page, no need to change password
  $changePasswordRoute = 'change_password';
  $_route  = $event->getRequest()->get('_route');
  if ($changePasswordRoute == $_route)
    return;

  // Check the user object to …
Run Code Online (Sandbox Code Playgroud)

response.redirect event-listener symfony assetic

6
推荐指数
1
解决办法
7511
查看次数

学说查询“where notIn”子查询问题

在 Symfony2 中,我在用户和角色之间有一个多:多的关系。我正在尝试获取未链接到该ROLE_SUPER_ADMIN角色的所有用户的列表。

在迁移到 Symfony2/Doctrine 之前,我已经通过一个简单的NOT INsql 查询实现了这一点,但在我的生活中,我无法用学说实现同样的效果。

这是我正在尝试的:

$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$qb2 = $qb;

$dql = $qb->select('sa.id')
          ->from('AcmeAdminBundle:User', 'sa')
          ->leftJoin('sa.roles', 'r')
          ->andWhere('r.role = :role')
          ->getDQL();

$result = $qb2->select('u')
              ->from('AcmeAdminBundle:User', 'u')
              ->where($qb2->expr()->notIn('u.id', $dql))
              ->setParameter('role', 'ROLE_SUPER_ADMIN')

$users = $result->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)

但这是错误:

[Semantical Error] line 0, col 140 near 'sa LEFT JOIN': 
Error: 'sa' is already defined.
Run Code Online (Sandbox Code Playgroud)

这是输出:

SELECT u 
FROM AcmeAdminBundle:User sa 
LEFT JOIN sa.roles r, AcmeAdminBundle:User u 
WHERE u.id NOT IN (
                   SELECT sa.id …
Run Code Online (Sandbox Code Playgroud)

php sql doctrine symfony doctrine-orm

2
推荐指数
1
解决办法
1712
查看次数