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 Ubuntu系统配置PX4
  • ¥20 MATLAB间接平差计算
  • ¥50 nw.js调用activex
  • ¥15 数据库获取信息反馈出错,直接查询了ref字段并且还使用了User文档的_id而不是自己的
  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 MAC虚拟机(win11)USB插上后无串口com,无法烧录
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥50 基于ubuntu的Mamba配置环境失败问题
  • ¥15 为什么视频算法现在全是动作识别?