2016-04-15 20 views
0

Ich mache eine Suchfunktion Funktion, die einen Wert aus einer Textbox bekommen (es tut, dass ich überprüft habe) und vergleicht mit der Spalte "skill" in der Tabelle "Skills". Wenn es eine Übereinstimmung gibt, entweder ein Zeichen oder ein ganzes Wort Es sollte Details aus der 'handyman'-Tabelle ausgeben, diese Tabellen sind mit' hasMany 'und' goesToMany 'in Modellen verknüpft.Laravel Suchfunktion gibt keine Ausgabe

Allerdings ist das Problem, dass ich Ausgabe bekomme, aber es ist ein Licht von allen Handwerker, auch wenn ich eine leere Zeichenfolge in Textfeld eingeben.

Controller:

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')); 
} 

View-Suche:

@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 

View-Details-hier sollte meine Ergebnisse sein:

@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

, warum das für jede Schleife? foreach ($ searchTerms als $ skill)? setze dies in Funktionsdetails und entkomme es aus $ searchTerm = $ request-> input ('skill'); –

Antwort

1

Wo kommt die $searchTerms Variable erhalten in die Details() Funktion? Haben Sie einen Code weglassen?

Ich nehme an, es ist in der Detailfunktion irgendwie eingestellt, wenn das der Fall ist, dann übergeben Sie $searchTerms nicht an den Umfang der WhereHas Schließung.

Versuche Zugabe zu dem use Teil des Verschlusses, wie unten:

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

Ich habe $ searchTerms = ('skill') hinzugefügt; Fähigkeit ist ein Name von Textfeld. und ich bekomme das: Ungültiges Argument für foreach() –

+0

Wie wäre es, wenn Sie '$ searchTerms = \ Request :: input ('skill');'? Da die Eingabe höchstwahrscheinlich eine Zeichenfolge ist und PHP ein Array erwartet, möchten Sie vielleicht ein Array aus dem Eingabewert '$ searchTerms = array (\ Request :: input ('skill')) machen;' oder für den Fall Du willst die Terms durch Leerzeichen teilen '$ searchTerms = explode ('', \ Request :: input ('skill'));' –

+0

FANTASTISCH, funktioniert, vielen Dank –