Я предполагаю, что вы используете 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 виджету.Вам нужно будет найти способ справиться с результатами поиска.Ну, я надеюсь, что это помогло вам