2016-04-15 10 views
0

私は、テキストボックスから値を取得する検索機能を実行しています(チェックしています)。スキル表の 'スキル'列と比較します。 1つの文字または単語全体に一致するものがある場合、 'handymen'テーブルの詳細を出力する必要があります。これらのテーブルは、モデル内で 'hasMany'および 'belongsToMany'とリンクされています。問題は、私は出力を得るかということですが、私がテキストボックスに空の文字列を入力した場合でも、すべての便利屋の点灯だがLaravel検索機能が出力を出さない

コントローラー:

function search() 
    { 
     $skills = Skill::all(); 
     return view('layouts/search',['skills' => $skills]); 
    } 
    //$searchTerm = request('skill'); 
function details() { 
    $handymen = Handyman::whereHas('skills', function($query) { 
     if(!empty($searchTerms)){ 
      foreach($searchTerms as $skill) { 
       $query->where('skill', 'LIKE', '%'. $skill .'%'); 
      }   
     } 
    })->get(); 
return view('layouts/details', compact('handymen')); 
} 

ビュー-検索:

@extends('layouts.master') 

@section('title', 'Search Page') 

@section('content') 
    <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> 
@endsection 

ビューの詳細は、ここに私の結果でなければなりません:

@extends('layouts.master') 

@section('title', 'Add Job') 
@section('content') 
    <h1>Handyman details</h1> 
    <ul> 
     @foreach ($handymen as $handyman) 
    <a href= "{{url('skilledHandyman/'.$handyman->id)}}"> 
     {{$handyman->first_name}}</a> 

@endforeach 
    </ul> 
@endsection 
+0

? foreach($ searchTermsを$ skillとして)?これを関数の詳細の中に入れてコメントを外します$ searchTerm = $ request-> input( 'skill'); –

答えて

1

$searchTerms変数は細部に入るん() 関数? コードを省略しましたか?

何となく詳細機能に設定されていると思いますが、その場合は、$searchTermsをwhereHasクロージャの範囲に渡さないでください。以下のように、クロージャのuse一部に追加する

試してみてください。なぜ、各ループの

function details() { 
    // .. somehow get $searchTerms first here. 

    $handymen = Handyman::whereHas('skills', function($query) use($searchTerms) { 
     if(!empty($searchTerms)){ 
      foreach($searchTerms as $skill) { 
       $query->where('skill', 'LIKE', '%'. $skill .'%'); 
      }   
     } 
    })->get(); 
} 
+0

$ searchTerms =( 'skill');を追加しました。 skillはテキストボックスの名前です。そして私はこれを得ます:foreach()の引数が無効です。 –

+0

'$ searchTerms = \ Request :: input( 'skill');'また、入力はたぶん文字列になり、PHPは配列を期待しているので、入力値 '$ searchTerms = array(\ Request :: input( 'skill'));)から配列を作成したい場合や、 ' –

+0

はAWESOME、働く、どうもありがとうございました。あなたは、' $のSearchTerms =(「、\リクエストを::入力( 『」スキル』))爆発スペースで用語を分割したいです –

関連する問題