Doctrine2多次获取行问题

时间:2013-02-26 17:43:25

标签: doctrine-orm many-to-many query-builder

我在Symfony2中将值传递给Doctrine2 QueryBuilder时遇到问题。 我有两个以单向ManyToMany关系加入的Entyties: 文章和标签,它工作正常,但当我尝试将值传递给qb参数时,它会读取错误espetcted Literal得到'ORDER'或什么也得不到(但记录存在)。 代码:

$em=$this->getDoctrine()->getEntityManager()->getRepository('Bundle:Articles');
$qb = $em->createQueryBuilder('l')
        ->select('l,t')
        ->leftJoin('l.tags', 't')
        ->where('1=1')
        ->orderBy('l.titol', 'ASC');

if(isset($criteria['Titol']) && !empty($criteria['Titol']) &&
    strlen(trim($criteria['Titol']))){
        $qb->andWhere('l.titol like :titol')
           ->setParameter('titol','%'.$criteria['Titol'].'%');
}

if(isset($criteria['includeRecurs']) && 
    !empty($criteria['includeRecurs']) && 
    trim($criteria['includeRecurs']=='recurs')){
        $qb->andWhere('trim(l.urlMicroSite) !=\'\' and l.urlMicroSite is not null');
}

if(isset($criteria['tag']) && is_array($criteria['tag']) && count($criteria['tag'])){
    foreach($criteria['tag'] as $k=>$v){
        $qb->andWhere( 't.id=:'.$k)->setParameter($k,$criteria['tag'][$k]);
    }
}

问题在于最后一次分配,其他工作:

$qb->andWhere( 't.id=:'.$k)->setParameter($k,$v);

如果我手动设置变量$ v例如:setParameter($ k,3)或setParameter($ k,'3')它工作正常......但如果我设置值$ v = 3然后调用代码,它没有得到任何东西(并没有错误)。 如果我直接设置了andWhere条件,例如andWhere('t.id ='。$ v)它会读取错误,因为文字得到'ORDER',硬编码它再次工作的值。 我确定$ v是正确的(var_dump,echo等)。 任何帮助都会被贬低(对我的英语很抱歉)

1 个答案:

答案 0 :(得分:0)

由于帖子空间,我需要在这里发帖: case 1查询原始参数,NO结果:

 --no results (parameter $v)
    SELECT l0_.ISBN AS ISBN0, l0_.EAN AS EAN1, l0_.numeroPagines AS numeroPagines2,
    l0_.preuLlibre AS preuLlibre3, 
    l0_.format AS format4, 
    l0_.dataPublicacio AS dataPublicacio5, 
    l0_.titolOriginal AS titolOriginal6, 
    l0_.disenyCoberta AS disenyCoberta7,
    l0_.ilustrador AS ilustrador8, l0_.coleccio AS coleccio9, l0_.versioDe AS versioDe10,
    l0_.descripcioCurta AS descripcioCurta11, l0_.urlMicroSite AS urlMicroSite12,
    l0_.visibleInici AS visibleInici13, l0_.titol AS titol14, l0_.autor AS autor15,
    l0_.descripcio AS descripcio16, l0_.imatge AS imatge17, l0_.id AS id18,
    l0_.idUsuariCreacio AS idUsuariCreacio19, l0_.dataCreacio AS dataCreacio20,
    l0_.idUsuariModificacio AS idUsuariModificacio21, 
    l0_.dataModificacio AS dataModificacio22,
    l0_.userLock AS userLock23, 
    t1_.nomTag AS nomTag24, 
    t1_.tipusTag AS tipusTag25, 
    t1_.id AS id26, 
    t1_.idUsuariCreacio AS idUsuariCreacio27, 
    t1_.dataCreacio AS dataCreacio28, 
    t1_.idUsuariModificacio AS idUsuariModificacio29, 
    t1_.dataModificacio AS dataModificacio30,
    t1_.userLock AS userLock31 
    FROM Llibre l0_ LEFT JOIN llibre_tag l2_ 
        ON l0_.id = l2_.llibre_id 
    LEFT JOIN Tags t1_ 
        ON t1_.id = l2_.tag_id 
    WHERE 1 = 1 
        AND t1_.id = '3' 
        **AND t1_.id = ''** <-- empty duplicated parameter (but why duplicated??)
    ORDER BY l0_.titol ASC

这里使用参数$ v = 3 hardcoded

进行相同的查询
--1 result as expected (parameter $v)
    SELECT l0_.ISBN AS ISBN0, l0_.EAN AS EAN1, l0_.numeroPagines AS numeroPagines2,
    l0_.preuLlibre AS preuLlibre3, 
    l0_.format AS format4, 
    l0_.dataPublicacio AS dataPublicacio5, 
    l0_.titolOriginal AS titolOriginal6, 
    l0_.disenyCoberta AS disenyCoberta7,
    l0_.ilustrador AS ilustrador8, l0_.coleccio AS coleccio9, l0_.versioDe AS versioDe10,
    l0_.descripcioCurta AS descripcioCurta11, l0_.urlMicroSite AS urlMicroSite12,
    l0_.visibleInici AS visibleInici13, l0_.titol AS titol14, l0_.autor AS autor15,
    l0_.descripcio AS descripcio16, l0_.imatge AS imatge17, l0_.id AS id18,
    l0_.idUsuariCreacio AS idUsuariCreacio19, l0_.dataCreacio AS dataCreacio20,
    l0_.idUsuariModificacio AS idUsuariModificacio21, 
    l0_.dataModificacio AS dataModificacio22,
    l0_.userLock AS userLock23, 
    t1_.nomTag AS nomTag24, 
    t1_.tipusTag AS tipusTag25, 
    t1_.id AS id26, 
    t1_.idUsuariCreacio AS idUsuariCreacio27, 
    t1_.dataCreacio AS dataCreacio28, 
    t1_.idUsuariModificacio AS idUsuariModificacio29, 
    t1_.dataModificacio AS dataModificacio30,
    t1_.userLock AS userLock31 
    FROM Llibre l0_ LEFT JOIN llibre_tag l2_ 
        ON l0_.id = l2_.llibre_id 
    LEFT JOIN Tags t1_ 
        ON t1_.id = l2_.tag_id 
    WHERE 1 = 1 
        AND t1_.id = '3' 
        **AND t1_.id = '3'** 
    ORDER BY l0_.titol ASC

最后查询其他参数不重复..

--1 result as expected (parameter $v=4,$title="%quil%")
SELECT l0_.ISBN AS ISBN0, l0_.EAN AS EAN1, l0_.numeroPagines AS numeroPagines2,
l0_.preuLlibre AS preuLlibre3, 
l0_.format AS format4, 
l0_.dataPublicacio AS dataPublicacio5, 
l0_.titolOriginal AS titolOriginal6, 
l0_.disenyCoberta AS disenyCoberta7,
l0_.ilustrador AS ilustrador8, l0_.coleccio AS coleccio9, l0_.versioDe AS versioDe10,
l0_.descripcioCurta AS descripcioCurta11, l0_.urlMicroSite AS urlMicroSite12,
l0_.visibleInici AS visibleInici13, l0_.titol AS titol14, l0_.autor AS autor15,
l0_.descripcio AS descripcio16, l0_.imatge AS imatge17, l0_.id AS id18,
l0_.idUsuariCreacio AS idUsuariCreacio19, l0_.dataCreacio AS dataCreacio20,
l0_.idUsuariModificacio AS idUsuariModificacio21, 
l0_.dataModificacio AS dataModificacio22,
l0_.userLock AS userLock23, 
t1_.nomTag AS nomTag24, 
t1_.tipusTag AS tipusTag25, 
t1_.id AS id26, 
t1_.idUsuariCreacio AS idUsuariCreacio27, 
t1_.dataCreacio AS dataCreacio28, 
t1_.idUsuariModificacio AS idUsuariModificacio29, 
t1_.dataModificacio AS dataModificacio30,
t1_.userLock AS userLock31 
FROM Llibre l0_ LEFT JOIN llibre_tag l2_ 
    ON l0_.id = l2_.llibre_id 
LEFT JOIN Tags t1_ 
    ON t1_.id = l2_.tag_id 
WHERE 1 = 1 
    AND l0_.titol LIKE '%quil%' 
    AND t1_.id = '3' 
    **AND t1_.id = '3**' 
ORDER BY l0_.titol ASC
相关问题