自动完成,搜索多个数据库表/字段 - Symfony

时间:2010-12-23 11:19:15

标签: symfony1 jquery-autocomplete

我有3个型号:

文章[姓名,标题]

照片[姓名,描述]

视频[名称,描述,转录]

现在,我想创建一个自动完成搜索,搜索每个模型和数据库字段,以便在输入字段中匹配字符串。

是否可以对这3个表进行搜索?

如果是这样,我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

UNION operator正是您要找的。

答案 1 :(得分:0)

我猜你使用推进器。

它绝对可以这样做,但是如果这些表与保存时可能导致一些混乱代码的任何内容无关。但如果您绝对需要在这些表中搜索,我的方法是创建一个类似的行为:

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,它工作得非常好,所以你应该检查一下。

编辑:嵌入式搜索字段的简短方法,创建sfForm,我之前提到的jQuery小部件,并将配置和js保留给小部件。你必须找到一种方法来处理搜索结果。 嗯,我希望这能帮到你!