我有以下查询构建器:
$queryBuilder = $this
->createQueryBuilder('recipient')
->leftJoin('recipient.message', 'message')
->orderBy('message.dateSent', 'DESC');
Run Code Online (Sandbox Code Playgroud)
这一直很好:)但是因为升级到Mysql 5.7我已经开始在任何地方得到这个错误:
SQLSTATE [HY000]:
一般错误:3065 子句的
表达式#1ORDER BY不在SELECT列表中,引用列'dctrn_result.date_sent_5'不在SELECT列表中;
这是不相容的DISTINCT
我已经在大多数使用DBAL图层的地方解决了这个问题,只需将项目添加到选择列表中,但我无法弄清楚如何使用此特定功能queryBuilder.
我正在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) 在 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)