在laravel 4中跨多个表格进行全文搜索

时间:2015-01-02 09:12:36

标签: php mysql laravel-4

我正在开发一个项目,需要对数据库中的多个表进行全文搜索。我在这里找到了一个有用的教程:

http://creative-punch.net/2013/12/implementing-laravel-4-full-text-search

我已经让它在一张桌子上工作,但现在希望扩展到多个。我遇到的问题是;如果重复表的其余部分,当我点击提交时,如何让按钮检查多个控制器?或修改现有的控制器来检查多个表?

代码

默认视图表单

<div class="search">
    {{ Form::model(null, array('route' => array('search'))) }}
    {{ Form::text('query', null, array( 'placeholder' => 'Search query...' )) }}
    {{ Form::submit('Search') }}
    {{ Form::close() }} 
</div>

返回视图

<div class="search">
    {{ Form::model(null, array('route' => array('search'))) }}
    {{ Form::text('query', null, array( 'placeholder' => 'Search query...' )) }}
    {{ Form::submit('Search') }}
 @foreach($posts as $post)
    <li>{{ $post->instance_id }}</li>
    <li>{{ $post->instance_type }}</li>
    <li>{{ $post->availability_zone }}</li>
    <li>{{ $post->status_checks }}</li>
    <li>{{ $post->alarm_status }}</li>
    <li>{{ $post->public_dns }}</li>
    <li>{{ $post->key_name }}</li>
 @endforeach
{{ Form::close() }}
</div>

控制器类

<?php 
class PostsController extends BaseController {

public function postSearch(){
    $q = Input::get('query');

   $posts =     ec2_instance::whereRaw("MATCH(instance_id,instance_type,availability_zone, status_checks,alarm_status, public_dns, key_name ) AGAINST(? IN BOOLEAN MODE)", 
        array($q))->get();
        View::share('posts', $posts);

    return View::make('ec2_instance', compact('posts'));

}
}
?>

我最初的想法是修改控制器,以便添加:

 $ip_address = public_ip::whereRaw("MATCH(ip_address) AGAINST(? IN BOOLEAN      MODE)",     
         array($q))->get();'

然后在视图中添加

     @foreach($ip_address as $ip)
         <li>{{ $ip->ip_address}}</li>
     @endforeach

但无法找到变量ip_address

1 个答案:

答案 0 :(得分:0)

我正在返回2个视图,根据我最初的想法,这是不可能的,确保您只返回1个视图,即

$posts = ec2_instance::whereRaw("MATCH(instance_id,instance_type,availability_zone, status_checks,alarm_status, public_dns, key_name ) AGAINST(? IN BOOLEAN MODE)", array($q))->get();



 $ip_address =
 public_ip::whereRaw("MATCH(ip_address ) AGAINST(? IN BOOLEAN MODE)",           array($q))->get();


$s3_bucket = 
 s3_bucket::whereRaw("MATCH(name, storage_class, size ) AGAINST(? IN BOOLEAN MODE)", array($q))->get();

 $cloudfront_distribution =    cloudfront_distribution::whereRaw("MATCH(delivery_method, cloudfront_id, domain_name,comment, origin, c_name, status, state ) AGAINST(? IN BOOLEAN MODE)", array($q))->get();

return View::make('ec2_instance', compact('ip_address', 'posts','s3_bucket', 'cloudfront_distribution'));