2016-04-14 100 views
0

我正在嘗試升級我的搜索工具,此刻我列出了所有可用的技能,並且一旦單擊它,它就會搜索具有該技能的handymens。現在我想創建一個搜索框,以便一旦用戶輸入任何內容,一旦點擊按鈕,就會搜索並顯示所有這些技能。例如'p'會返回'水管工'。但是我很努力,所以請幫助我,如果有其他文件或數據庫需要附加,請讓我知道。在laravel中創建搜索工具

查看:

<h1>Here you can search</h1> 
    <form action="{{url('details')}}" method="POST"> 
    {{ csrf_field() }} 
     <div> 
      <input type='text' name='skill'/> 
     </div> 
    <input type="submit" name="submitBtn" value="Search"> 
    </form> 
    @foreach ($skills as $skill) 
     <p> 
      <a href="{{url('details/'.$skill->id)}}">{{$skill->skill}}</a>   
     </p> 

    @endforeach 
@endsection 

控制器:

function search() 
{ 
    $skills = Skill::all(); 
    return view('layouts/search',['skills' => $skills]); 
} 
function details($skillId) 
{ 
$skill = Skill::find($skillId); 
$handymen = $skill->handymen; 
$skill = Input::get('skill'); 
$result = Handyman::where('skills','LIKE','%'.$skill.'%') 
      ->orWhere('email','LIKE','%'.$skill.'%') 
      ->get(); 
return view('layouts/details', ['skill' => $skill,'handymen' => $handymen]); 
} 

巧手數據庫:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateHandymenTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
public function up() 
{ 
    Schema::create('handymen', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('first_name'); 
     $table->string('last_name'); 
     $table->string('street'); 
     $table->string('postcode'); 
     $table->string('town'); 
     $table->string('skills'); 


     $table->integer('job_id')->unsigned(); 
     $table->foreign('job_id')->references('id')->on('jobs')->onDelete('cascade'); 


     $table->timestamps(); 
     }); 
    } 
/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::table('handymen', function (Blueprint $table) { 
     $table->dropForeign('handymen_job_id_foreign'); 
     $table->dropColumn('job_id'); 
    }); 
    } 
} 

技能表:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateSkillsTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('skills', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('skill'); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('skills'); 
    } 
} 

結表:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateHandymanSkillTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('handyman_skill', function (Blueprint $table) { 
      $table->integer('handyman_id')->unsigned(); 
      $table->integer('skill_id')->unsigned(); 
      $table->timestamps(); 
     }); 
     Schema::table('handyman_skill', function ($table) { 
      $table->primary(['handyman_id', 'skill_id']); 
      $table->foreign('handyman_id')->references('id')->on('handymen')->onDelete('cascade'); 
      $table->foreign('skill_id')->references('id')->on('skills')->onDelete('cascade'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('handyman_skill'); 
    } 
} 

回答

0

這可能不是直接回答你的問題,但我建議使用類似ElasticSearch你的搜索服務。
在我有幾十萬條記錄的情況下,它確實很棒,而且它的設置非常簡單。
另外,還有一個名爲Elasticquent的庫,使Elasticsearch更易於在Laravel中使用。

+0

我想讓事情變得簡單,因爲那是我被要求做的事情,而不使用這種服務 –