где нравится - учение - symfony - PullRequest
3 голосов
/ 18 августа 2011
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();
}

если я отправлю заголовок = один, то покажи мне все в порядке, как если бы заголовок = два, но если я ввел в поиске ввода "один два", то это не работаетКак изменить SQL-запрос и код для этого?Я хотел бы, если бы я ввел «один два», а затем показать мне идентификатор заголовка 1 и идентификатор заголовка 2. Теперь ничего не отображается.

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Вам нужно разбить поисковый запрос на слова и добавить их все в запрос доктрины:

foreach(explode(" ", $request->getParameter("title")) as $v) {
  $q->orWhere("a.title LIKE %?%", $v);
}
2 голосов
/ 27 августа 2014

Это сработало для меня:

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

Это был единственный способ, которым Доктрина приняла параметры с LIKE %.

...