doctrine的用foreach使用orWhere

//我有一个数组
$arr = array('bu_1' => 'pid_1', 'bu_2' => 'pid_2', ... , 'bu_n' => 'pid_n');

//我想用这个数组匹配数据库的字段, 并取得结果集.

        $iof_qb = $em->createQueryBuilder();
        $iof_qb->select('iof')
                ->from('AlbatrossAceBundle:Attachinfo', 'iof')
                ->leftJoin('iof.bu', 'b')
                ->leftJoin('iof.project', 'p')
                ->where('iof.children = 0');
        foreach( $arr as $key => $val ) {
            $iof_qb->orWhere('b.number = :key AND p.id = :val');
        }
//不知道该怎么写下去了. 
//想到的办法有, 创建一个数组, 保存setParameters 里的数组. 可orWhere 里又不知道怎么写
阅读 3.6k
1 个回答

DQL里的参数名是不能重复的,所以你可以自己维护一个序列号,对应“第N个键/值对”:

$seq = 1;
foreach ($arr as $key => $val) {
    $qb->orWhere(sprintf('b.number=:key_%d AND p.id=:val_%d', $seq, $seq))
        ->setParameter('key_' . $seq, $key)
        ->setParameter('val_' . $seq, $val);

    $seq++;
}

没有实测,只要你标记好什么值对应什么参数就行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进