【发布时间】:2015-11-30 16:47:47
【问题描述】:
我无法根据语句设置值
我想激活特定的uc 并停用所有其他ucs。
(uc.collection = :collectionId) 应该返回 true 或 false 以便正确处理。
查询生成器:
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$queryBuilder->update('TestBundle:UserCollection', 'uc')
->set('uc.active', '(uc.collection = :collectionId)')
->where('uc.user = :userId');
$queryBuilder->setParameter('collectionId', $collectionId);
$queryBuilder->setParameter('userId', $userId);
输出 DQL:
UPDATE TestBundle:UserCollection uc
SET uc.active = (uc.collection = :collectionId) WHERE uc.user = :userId
getSQL 错误:
[Syntax Error] line 0, col 81: Error: Expected
Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got '='
这里是我想要的 SQL:
UPDATE user_collections AS uc SET uc.active = (uc.idCollections = 1)
WHERE uc.idUsers = 74
【问题讨论】:
-
呃,你为什么要在一开始就使用括号?
-
没有我得到这个错误
[Syntax Error] line 0, col 80: Error: Expected end of string, got '=' -
你得到它是有原因的。为了便于阅读,我现在将写一个答案,这可能会对您有所帮助...
-
没有
(DQL 看起来不对... SET uc.active = c.id = :collectionId WHERE ... -
确实添加了更多信息和我想要的 SQL
标签: php mysql sql symfony doctrine-orm