【问题标题】:search query not working in laravel搜索查询在 laravel 中不起作用
【发布时间】:2017-08-09 00:33:46
【问题描述】:

我需要返回用户在搜索栏中所写内容的结果,但是当我按下搜索进行测试时,什么也没有发生。

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

<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 语句之前尝试它时,我得到了一个错误

未定义变量:查询(查看: ...\resources\views\sources\index.blade.php)

我做错了什么。

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    在您上面的代码中,$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 变量。

    【讨论】:

    • 这不是 OP 遇到的问题,请查看 Peter 的问题(未定义变量:查询)中的错误消息,所以它肯定只是一个错字。
    • 而且您更新的答案也不起作用,因为重定向仍在使用会话。
    • 更新了我的代码 return redirect()->route('sources-index')->with('customerror', '没有找到,尝试不同的搜索词。');没有查询变量,所以这可能是问题
    • @AlexeyMezenin 这里不在我的代码中使用会话,只是在变量中传递值:stackoverflow.com/questions/30220482/…
    • 大家感谢您的帮助@alexey mezenin 的回答让我现在很开心??
    【解决方案2】:

    @Peter Arents 你可以试试下面的方法

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

    【讨论】:

      【解决方案3】:

      redirect()-&gt;with() 使用 session 来存储数据,因此您需要将代码更改为:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-02-09
        • 2014-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多