条令在1和2个表深度检索和排序数据


Doctrine retrieve and order data at 1 and 2 tables depth

我在条令中有三个表,为了简单起见,我将它们称为:UMR

U可以具有MR

M可以有R

R不能有

作为一个图表,这可能看起来像:

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

我想做的是创建一个查询,通过M或直接按R中的列排序并按R中的列查询与U相关的所有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 . "%");

以及许多其他事情,但都无济于事。。。

提前感谢!

好吧,所以我最终做的是:

M中选择所有ID,其中u.id = :uid

然后,从R中选择全部,其中r.u = :uid OR r.m IN (result from first query)

真的很简单,我不知道为什么我没有早点想到。。。