如何在Symfony Doctrine中添加where子句到Native Query。例如,我的初始查询如:
$query = $em->createQuery("select distinct s.id
from service s join tags_services t on t.service_id=s.id join tag on t.tag_id = tag.id
where
(s.title like '%play%'
or tag.name like '%play%'
or s.description like '%play%')
order by
s.title like '%play%' desc,
tag.name like '%play%' desc,
s.description like '%play%' desc");
$services = $query->getResult();
但如果我想用更多参数过滤此结果,例如添加
'AND s.category = :category'
如果给出了类别。或添加排序参数。基本上我试图了解如何动态更改此查询字符串。
答案 0 :(得分:1)
这样的东西?
$filter = '';
if (category instanceOf Category) {
filter = ' AND s.category = :category'
}
$sql = '
select distinct s.id
from service s
join tags_services t on t.service_id=s.id join tag on t.tag_id = tag.id
where
(s.title like :play
or tag.name like :play
or s.description like :play)
'. $filter .'
order by
s.title desc,
tag.name desc,
s.description desc'
你也可以使用querybuilder:
$qb = $this->createQueryBuilder('s')
->addSelect('distinct s.id')
->join('s.tags_services', 'ts')
->join('ts.tag', 't');
$qb->where($qb->expr()->orX(
$qb->expr()->like('s.title', ':play'),
$qb->expr()->like('t.name', ':play'),
$qb->expr()->like('s.description', ':play'),
));
if (category instanceOf Category) {
$qb->addWhere(...)
}