автозаполнение, поиск по нескольким таблицам / полям базы данных - Symfony - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть 3 модели:

статья [имя, название]

фото [название, описание]

видео [название, описание, транскрипция]

Теперь я хочу создать поиск автозаполнения, который будет искать в каждой из этих моделей и в полях БД соответствующую строку в поле ввода.

Можно ли выполнить поиск по этим 3 таблицам?

Если так, как бы я поступил?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Оператор UNION - это то, что вы ищете.

0 голосов
/ 23 декабря 2010

Я предполагаю, что вы используете propel.

Это абсолютно возможно сделать, но если эти таблицы не связаны с чем-либо, что может привести к некоторому грязному коду при сохранении.Но если вам абсолютно необходимо выполнить поиск в этих таблицах, мой подход заключается в создании действия, подобного:

public function executeAutocomplete(sfWebRequest $request)
{
  $q = $request->getParameter('q');//The value to be searched
  $limit = $request->getParameter('limit');//Not completly necessary but recommendable
  if(count($q) == 0)
  {
    return sfView::NONE;//With no input, no search
  }

  $results = array( 'article' => array(), 'photo' => array(), 'video' => array());

  $article_search = ArticlePeer::search($q,$limit);
  $photo_search = PhotoPeer::search($q,$limit);
  $video_search = VideoPeer::search($q,$limit);

   $this->process_search($results,$article_search,$photo_search,$video_search);
  //Process those three arrays to fit your need

  return $this->renderText(json_encode($result));
}

Теперь функция поиска в классах Peer может выглядеть следующим образом:

ArticlePeer >>

public static function search($q,$limit = null)
{
 $c = new Criteria();
 $c->add(self::NAME,'%'.$q.'%',Criteria::LIKE);
 if(!is_null($limit))
 {
  $c->addLimit($limit);
 }
 return self::doSelect($c);
}

Наконец, что касается виджета, я использовал и адаптировал sfWidgetJQueryAutocomplete, и он работает довольно хорошо, поэтому вы должны проверить его.

РЕДАКТИРОВАТЬ: короткий путь к встраиваниюполе поиска si создает sfForm с виджетом jQuery, о котором я упоминал ранее, и оставляет конфигурацию и js виджету.Вам нужно будет найти способ справиться с результатами поиска.Ну, я надеюсь, что это помогло вам

...