Doctrine在1和2个表深度检索和订购数据

时间:2013-07-09 13:02:33

标签: php zend-framework symfony doctrine dql

我在教条中有3个表格,为简单起见,我会称之为:UMR

U可以有MR

M可以有R

R什么都没有

如图所示,这可能是:

U ---> M
|      |
|      V
'----> R

我想要做的是创建一个查询以通过R获取与U相关的所有M,或者通过R中的列直接排序并查询通过R中的列。

目前我在PHP中

$qb->select('r')
    ->from('R','r')
    ->where('r.u = :uid')
    ->orderBy('r.order','DESC')
    ->setParameter('uid', $U->getId())
    ->setFirstResult( $offset )
    ->setMaxResults( $limit )
    ->andWhere(
        $qb->expr()->orX(
            $qb->expr()->like('r.q1',':query'),
            $qb->expr()->like('r.q2',':query')
        )
    )
    ->setParameter('query', "%" . $query . "%");

我想以某种方式加入m.r,同时仍能查询其属性。我试过了:

$qb->select('u.r, m.r')
    ->from('U','u')
    ->where('u.id = :uid')
    ->join('u.m','m')
    ->orderBy('u.r.order','DESC')
    ->setParameter('uid', $U->getId())
    ->setFirstResult( $offset )
    ->setMaxResults( $limit )
    ->andWhere(
        $qb->expr()->orX(
            $qb->expr()->like('u.r.q1',':query'),
            $qb->expr()->like('u.r.q2',':query')
        )
    )
    ->setParameter('query', "%" . $query . "%");

除了许多其他事情,但无济于事......

提前感谢!

1 个答案:

答案 0 :(得分:0)

好的,我最终做的是:

M u.id = :uid

中选择所有ID

然后,从R r.u = :uid OR r.m IN (result from first query)

中选择所有内容

简单,我不知道为什么我之前没有想到它......