簡體   English   中英

教義查詢生成器:返回兩個相同結果的數組的結果

[英]Doctrine Query Builder : Result returning array of two times the same result

我目前正在研究一個Symfony項目,使用Doctrine來管理實體。

我有一個名為User的表,其中包含幾列,然后是另一個名為Tag的表,其中包含該User表的外鍵,該表具有基於用戶ID的ManyToOne關系,以及另一個名為value的列。

在我的應用中,我需要根據“標記”行之一和“用戶”列之一的值查找用戶列表。 讓我們繼續:

選擇user.value等於somevalue且Tag.value等於anothervalue的所有用戶。

由於在此項目之前從未使用過Symfony或Doctrine,所以我搜索了Doctrine文檔並找到了有關查詢生成器的信息。 所以,我這樣做:

編輯:我做的方式有點奇怪,所以我修改了它,這是結果:

public function findByTagAndApp($tag, $app)
{
    $em = $this->getEntityManager();
    $qb = $em
        ->getRepository('APIBundle:User')
        ->createQueryBuilder('u')
        ->leftJoin('APIBundle\Entity\Tag', 't')
        ->where('u.application = :app')
        ->andWhere('t.tag = :tag')
        ->setParameter('tag', $tag)
        ->setParameter('app', $app)
    ;
    $users = $qb->getQuery()->getResult();
    return $users;
}

看起來好像可行,但是以一種奇怪的方式。 而不是返回我想要的用戶項數組,而是返回了一個用戶項數組。 第一個數組始終包含兩個條目,而這兩個條目始終相同:它們是我需要的數組,沒有任何區別。

我嘗試返回$ users [0]而不是僅僅返回用戶,然后可以按預期方式操作User實體。 我可以一直使用這種方式,但是我真的很想知道為什么它返回不需要的數組而不是我想要的數組。 這可能是我的查詢,但是我不確定如何修改它以僅獲取所需的用戶。

由於我仍在學習Doctrine,因此對它為什么如此表現的任何線索都將非常感激。 謝謝 !

EDIT²:沒關系,該查詢似乎也完全不正確,因為我根據$ app值獲取了所有用戶,但似乎它從未檢查過Tag表中是否存在與外鍵關聯的somevalue值的行。用戶表..

我不知道到底是為什么,但是..我想你不得不提到from(),例如->from('User', 'u')在這里可以找到更多

經過幾個小時的調整,我在PhpMyAdmin上使用SQL語句找出了問題,所以我注意到有很多事情我做錯了:

首先,聯接不正確。 我的目標是收集在自己的表中具有特定值的用戶,以及在Tag表中具有值的用戶。 使用左聯接,我正在使用自己的值或Tag表中的值來收集用戶。

第二:我傳遞的$ app值是Application類型的對象(User表中的Application字段是外鍵),查詢構建器不知道該怎么做。 傳遞app_id而不是app對象解決了該問題。

第三:我收集結果的方式是錯誤的。 顯然,此查詢返回一個User對象數組。 當我連續執行此查詢多次時,我有一個數組,在該數組上我使用array_push填充了數據,以為用array2推送array1會將array2的值放入array1,但這只是將array2放入array1,結果就是最初的問題。 現在,使用array_merge而不是array_push,我可以將查詢的所有結果收集到單個數組中。 在其上添加一些array_unique可以避免冗余,並且一切正常。

感謝所有答復!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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