搜索查询无法在laravel中工作

时间:2017-03-17 12:34:37

标签: php mysql laravel

我需要返回用户在搜索栏中写的内容的结果,但是当我按搜索来测试它时没有任何反应。

这就是我创建搜索栏的方式

<form class="form-inline" role="search" action="{{ route('search-source') }}" method="POST">
    {{ csrf_field() }}
    <div class="form-group">
        <input type="text" class="form-control" name="searchbar" placeholder="Find a source!">
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
</form>

在我的控制器中,我有以下代码来查找用户在搜索栏中输入的内容。它在日期库中搜索与搜索栏中写入的内容类似的标题。如果没有找到,则返回错误(这是有效的)。 如果高于0的行返回,则需要将该结果返回到页面

public function searchSource(Request $request){
    $this->validate($request,[
        'searchbar' => 'required',
    ]);

    $find = $request['searchbar'];

    $query = Source::where('title','LIKE', '%'.$find.'%')->where('user_id', Auth::user()->id)->get();

    if(count($query) > 0) {
        return redirect()->route('sources-index')->with(['query' => $query]);
    }else{
        return redirect()->route('sources-index')->with('customerror', 'nothing found, try a different searchterm.');
    }
}

回到页面上,如果有人要求提供搜索结果需要获得结果,否则需要提供数据库的所有内容

@if(!empty($query))
    @foreach($query as $querys)
        <tr>
            <td class="source-cell">
                {{$querys->title}}
            </td>

            <td>
                {{$querys->summary}}
            </td>

            <td>
                {{$querys->course->name}}
            </td>
        </tr>
    @endforeach
@else
    @foreach ($sources as $source)
        <tr>
            <td class="source-cell">
                {{$source->title}}
            </td>

            <td>
                {{$source->summary}}
            </td>

            <td>
                {{$source->course->name}}
            </td>
        </tr>
    @endforeach
@endif

我在几个地方尝试了dd(),一切正常,除了在页面上,我在if语句没有发生任何事情后尝试dd($query)

在foreach没有发生任何事情之后我试过了。

但是当我在if语句之前尝试它时出现错误

  

未定义的变量:query(查看:   ... \资源\视图\源\ index.blade.php)

我做错了什么。

3 个答案:

答案 0 :(得分:2)

在上面的代码$query拼写错误

更改

@if(!empty($uery))

@if(!empty($query))

修改您的控制器,如下所示:

public function searchSource(Request $request){
    $this->validate($request,[
        'searchbar' => 'required',
    ]);
    $find = $request['searchbar'];
    $query = Source::where('title','LIKE', '%'.$find.'%')->where('user_id', Auth::user()->id)->get();
    return redirect()->route('sources-index')->with(['query' => $query]);

}

修改您的视图,如下所示:

@if(!empty($uery))
    @foreach($query as $querys)
        <tr>
            <td class="source-cell">
                {{$querys->title}}
            </td>

            <td>
                {{$querys->summary}}
            </td>

            <td>
                {{$querys->course->name}}
            </td>
        </tr>
    @endforeach
@else
nothing found, try a different searchterm.
@endif
@if(!empty($sources))
    @foreach ($sources as $source)
        <tr>
            <td class="source-cell">
                {{$source->title}}
            </td>

            <td>
                {{$source->summary}}
            </td>

            <td>
                {{$source->course->name}}
            </td>
        </tr>
    @endforeach
@else
nothing found, try a different searchterm.
@endif

因为在你的else部分重定向没有$ query变量。

答案 1 :(得分:0)

@ Peter Arents请你试试如下

function isClicked(){ 
  var letter = $(this).text().trim(); 
  console.log(text);
}

答案 2 :(得分:0)

redirect()->with()使用会话来存储数据,因此您需要将代码更改为:

@if (session()->has('query'))
    @foreach(session('query') as $querys)

或者,您需要将redirect()部分更改为:

return view('query.index', compact('query'));