我正在执行搜索工具功能,该功能可以从文本框中获取值(我已检查过),并与“技能”进行比较。专栏'技巧'表。如果匹配任何一个字符或整个单词它应输出来自' handymen'表格,这些表格与' hasMany'和' belongsToMany'在模型中。
然而问题是我确实得到输出,但即使我在文本框中输入一个空字符串,它也是所有杂工的亮点。
控制器:
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 :(得分:1)
$searchTerms
变量在哪里进入details()函数?
你省略了一些代码吗?
我觉得它是以某种方式在详细信息函数中设置的,如果是这种情况,那么你就不会将$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();
}