[英]Array not in array for doctrine query
我需要使用數組不在數組中的條件。 我有一個數組,其中有兩個要搜索的元素。 例如
(3,1)NOT IN((2,3),(1,3),(1,32))
它在phpmyadmin中作為SQL查詢工作。 但不能用作原則查詢。
$em = $this->getDoctrine()->getManager();
$qb = $em->getRepository('FangoUserBundle:User')
->createQueryBuilder('user')
->leftJoin('user.collabInvitationTarget', 'invite')
->where('(:currentUserId, user.id) NOT IN (:inviteArr)')
->setParameter('currentUserId', $this->getUser()->getId())
->setParameter('inviteArr', $invites, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY);
在FangoCollabaignBundle:Default:index中渲染模板(“ [語法錯誤]行0,第304行:錯誤:預期的Doctrine \\ ORM \\ Query \\ Lexer :: T_CLOSE_PARENTHESIS,得到了','”),此過程中引發了異常。 html.twig在第54行。
有什么建議嗎?
這可能不是最終答案,但此處需要糾正一些問題。
雖然在基本SQL中是允許的,但是查詢應該在雙引號之間,而字符串應該在單引號之間。 並非相反。
從您的代碼中,我猜想您的自定義查詢在控制器中。 最好將它與新功能一起移入實體存儲庫,然后在控制器中調用此功能。
奇怪的是,您沒有為createQueryBuilder()
得到錯誤,因為在此上下文中不存在該錯誤。
避免別名可能會誤認為實體名稱。
我的where()
周圍的查詢錯誤。
考慮到您應用了第2點,這就是我要嘗試的方法。
public function getNameYourFunction($user, $invites) {
$em=$this->getEntityManager();
$qb=$em->createQueryBuilder()
$qb->select("u")
->from(User::class, "u")
->leftJoin("u.collabInvitationTarget", "i")
->where($qb->expr()->notin("u.id", "(:inviteArrA)"))
->andWhere($qb->expr()->notin(":currentUserId", "(:inviteArrB)"))
->setParameters(array(
'currentUserId'=>$user->getId(),
'inviteArrA'=>implode(',', $invites),
'inviteArrB'=>implode(',', $invites),
));
}
您會注意到我正在使用User::class
。
確保通過添加以下行將其導入您的存儲庫中:
use FangoUserBundle\\Entity\\User;
(可能是不同的use
你的情況)
這就是我根據您的代碼執行的操作。 告訴我們它是否解決了您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.