我在条令中有三个表,为了简单起见,我将它们称为:U
、M
和R
U
可以具有M
和R
的
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)
真的很简单,我不知道为什么我没有早点想到。。。