You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:48:02