Doctrine MySQL使用getRepository()时如何将andWhere设为可选条件
你原有代码运行失败的核心原因是 createQueryBuilder() 方法会返回全新的 QueryBuilder 实例,你没有将该实例赋值给变量保存,后续的查询条件、分页方法实际是调用在仓库对象上,而非查询构造器实例上,因此会报错。
可直接运行的实现代码
// 初始化查询构造器并保存实例 $qb = $em->getRepository('\\App\\Entity\\' . $model) ->createQueryBuilder('p') ->where($queryOpts['where']); // 仅当搜索词不为空时追加查询条件 if (!empty($devSearch)) { $qb->andWhere('p.link LIKE :search') ->setParameter('search', $devSearch); } // 执行分页查询获取结果 $postsList = $qb->setMaxResults($postPayload) ->setFirstResult($offset) ->getQuery() ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); $totalItems = count($postsList);
补充注意事项
- 如果
$devSearch是用户提交的原始搜索内容,建议提前处理通配符,避免匹配失效:$devSearch = '%' . trim($devSearch) . '%'; - 可以根据业务需求调整判断条件,比如额外校验搜索词长度是否符合要求,再决定是否追加查询条件。
内容的提问来源于stack exchange,提问作者f1vlad
相关产品推荐
相关产品推荐

