【问题标题】:where like - doctrine - symfony哪里像 - 教义 - symfony
【发布时间】:2011-08-17 22:07:03
【问题描述】:
News:
id | title | sub
1  | one   | sub1
2  | two   | sub2


public function executeSearch(sfWebRequest $request)
{      
  $q = Doctrine_Core::getTable('News')
          ->createQuery('a')
          ->where("a.title LIKE %?%", array($request->getParameter('text')));

  if ($request->getParameter('sub')){
           $q->andWhere('a.subtile = sub2');
  }
  $test = $q->execute();
}

如果我发送 title = one 则显示 ok,与 title = two 相同,但如果我在输入搜索中输入“one two”,则这不起作用。如何为此更改 SQL 查询和代码?我想如果我输入“一二”,然后显示标题 id 1 和标题 id 2。现在什么都不显示。

【问题讨论】:

    标签: php mysql sql symfony1 doctrine


    【解决方案1】:

    您需要将搜索查询分解为单词,并将它们全部添加到教义查询中:

    foreach(explode(" ", $request->getParameter("title")) as $v) {
      $q->orWhere("a.title LIKE %?%", $v);
    }
    

    【讨论】:

      【解决方案2】:

      这对我有用:

      foreach(explode(" ", $request->getParameter("title")) as $k => $v) {
         ->orWhere('u.email LIKE :keyword'.$k )
         ->setParameter('keyword'.$k, '%'.$v.'%');
      }
      

      这是 Doctrine 接受 LIKE % 参数的唯一方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多