我有3个型号:
文章[姓名,标题]
照片[姓名,描述]
视频[名称,描述,转录]
现在,我想创建一个自动完成搜索,搜索每个模型和数据库字段,以便在输入字段中匹配字符串。
是否可以对这3个表进行搜索?
如果是这样,我该怎么做呢?
答案 0 :(得分:1)
UNION operator正是您要找的。 p>
答案 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保留给小部件。你必须找到一种方法来处理搜索结果。 嗯,我希望这能帮到你!