doutui4649 2016-05-26 12:24
浏览 37
已采纳

Symfony / Doctrine - 如何解释此代码?

I have two Tables in symfony join by ManyToOne bidirectional relationship. articles and dates.

I have in result ALL the articles except a.id : 4 because one of them doesn't respond to the condition.

I found the solution but how can I symplify it ? I know it's not optimised. And I would like to.

In my table (dates) i have :

+----------------------------
| id   | a.id  | OK OR NOT ? 
+----------------------------
| 1    | 4     |      OK 
| 2    | 4     |      OK 
| 3    | 6     |      OK 
| 4    | 5     |      OK 
| 5    | 4     |   **NOTOK** 
----------------------------

    $qb = $this->createQueryBuilder('a');
    $allIndispo = $qb
        ->select('a.id')
        ->leftJoin('a.dates','d')
        ->where('**NOTOK**')
        ->orderBy('a.id', 'ASC')
        ->getQuery()
        ->getResult();

    $allIndispoId = array();
    foreach ($allIndispo as $key => $value) {
        foreach ($allIndispo[$key] as $key2 => $value2) {
            $allIndispoId[] = $value2;
        }
    }

    $allDispo = $this->createQueryBuilder('a')
        ->select('a')
        ->where($qb->expr()->notIn('a.id', "'".implode($allIndispoId, "', '")."'"))
        ->getQuery()
        ->getResult();

    return $allDispo;
  • 写回答

1条回答 默认 最新

  • dongyupen6269 2016-05-26 12:58
    关注

    Try to use the first query as subquery for the second, as example:

    $qb = $this->createQueryBuilder('a2');  //We need a different alias here
        $allIndispo = $qb
            ->select('a2.id')
            ->leftJoin('a2.dates','d')
            ->where('**NOTOK**') // so take care to change the table alias here also
            ->orderBy('a2.id', 'ASC');
    
    
    $allDispo = $this->createQueryBuilder('a')
        ->select('a')
        ->where($qb->expr()->notIn('a.id', $subQuery->getDQL()))
        ->getQuery()
        ->getResult();
    
    return $allDispo;
    

    Hope this help

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵