【问题标题】:Doctrine MySQL, how to make andWhere optional with getRepository()Doctrine MySQL,如何使用 getRepository() 使 andWhere 成为可选
【发布时间】:2021-08-26 23:31:13
【问题描述】:

我在应用控制器上有一个简单的查询来生成列表视图。如果用户提供了搜索词,我需要添加可选的 andWhere。

这是我使用硬编码搜索词的查询:

$devSearch = '%youtube%';

$postsList = $em->getRepository('\\App\\Entity\\' . $model)
  ->createQueryBuilder('p')
  ->where($queryOpts['where'])
  ->andWhere('p.link LIKE :search')
  ->setParameter('search', $devSearch)
  ->setMaxResults($postPayload)
  ->setFirstResult($offset)
  ->getQuery()
  ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

$totalItems = count($postsList);

我需要将此部分设为可选:

  ->andWhere('p.link LIKE :search')
  ->setParameter('search', $devSearch)

有什么直接的方法吗?

我认为我应该能够做到这一点,但它失败了:


$postsList = $em->getRepository('\\App\\Entity\\' . $model);

$postsList
  ->createQueryBuilder('p')
  ->where($queryOpts['where']);

if($devSearch) {
  $postsList
    ->andWhere('p.link LIKE :search')
    ->setParameter('search', $devSearch)
}

$postsList
  ->setMaxResults($postPayload)
  ->setFirstResult($offset)
  ->getQuery()
  ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

【问题讨论】:

  • 它是如何失败的?错过';'时出现语法错误
  • 即使使用分号也会失败并出现错误:消息:count():参数 #1 ($value) 必须是 Countable|array 类型,Doctrine\ORM\QueryBuilder 给定

标签: php doctrine-orm doctrine


【解决方案1】:

可以这样写

$x = $em->getRepository('\\App\\Entity\\' . $model)
  ->createQueryBuilder('p')
  ->where($queryOpts['where']);

if (xxxxx)
  $x->andWhere('p.link LIKE :search')
  ->setParameter('search', $devSearch)
  
$results = $x->setMaxResults($postPayload)
  ->setFirstResult($offset)
  ->getQuery()
  ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

【讨论】:

  • 即使使用分号也会失败并出现错误:消息:count():参数 #1 ($value) 必须是 Countable|array 类型,Doctrine\ORM\QueryBuilder 给定
  • 这意味着你的代码在添加if语句之前没有工作:) 下次尝试逐行添加。而不是一次测试。
  • 这个话题可能有你需要的答案openclassrooms.com/forum/sujet/…
猜你喜欢
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多