簡體   English   中英

數組不在數組中用於學說查詢

[英]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行。

有什么建議嗎?

這可能不是最終答案,但此處需要糾正一些問題。

  1. 雖然在基本SQL中是允許的,但是查詢應該在雙引號之間,而字符串應該在單引號之間。 並非相反。

  2. 從您的代碼中,我猜想您的自定義查詢在控制器中。 最好將它與新功能一起移入實體存儲庫,然后在控制器中調用此功能。
    奇怪的是,您沒有為createQueryBuilder()得到錯誤,因為在此上下文中不存在該錯誤。

  3. 避免別名可能會誤認為實體名稱。

  4. 我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM