【问题标题】:How to compare a value from the search bar to the one from the database in laravel如何将搜索栏中的值与laravel中数据库中的值进行比较
【发布时间】:2019-10-28 01:04:25
【问题描述】:

我正在尝试在我的 Laravel 项目中使用搜索框,但从早上开始我一直收到同样的错误

这是我的Search controller

    <?php

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;

    class SearchController extends Controller
    {
        public function index()
        {

            return view('search.index');
        }
        public function Search(Request $request)
        {
            $serial_number= $request->input('search');
            $results =DB::table('animals')->where(function ($query) use ($serial_number) {
                $query->where('serial_number','LIKE',"%$serial_number%");
            })->latest()->get();
            return view('search',compact('results'));

        }
    }

My routes

Route::get('/search','SearchController@index')->name('search');
Route::post('/search','SearchController@search')->name('search');

最后是我的view

    @extends('layouts.app')

    @section('content')
        <form action="{{ route('search') }}" method="POST">

            <div class="p-1 bg-light rounded rounded-pill shadow-sm mb-4">
                <div class="input-group">
                    <input type="search" name="search" placeholder="Here the animal serial number..." aria-describedby="button-addon1" class="form-control border-0 bg-light">
                    <div class="input-group-append">
                        <button id="button-addon1" type="submit" class="btn btn-link text-primary"><i class="fa fa-search"></i></button>
                    </div>
                </div>
            </div>
        </form>
        @if($results)
            <div class="container">
                <div class="row justify-content-center">
                    <div class="col-md-8">
                        <div class="card">
                            <div class="card-header">
                                <h3>Details for the animal</h3>

                            </div>
                            <div class="card-body">
                                <div class="col-12">
                                    <p><strong>Id: </strong>{{ $results->id }}</p>
                                    <p><strong>Animal: </strong>{{ $results->type->category }}</p>
                                    <p><strong>Gender: </strong>{{ $results->gender }}</p>
                                    <p><strong>Place Of Birth: </strong>{{ $results->user->address->city }}</p>
                                    <p><strong>Farm: </strong>{{ $results->user->name }}</p>
                                    <p><strong>Date: </strong>{{ $results->created_at }}</p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        @endif
    @endsection

对我来说,我认为问题出在 $result 行上的 controller 上,这使得视图出现错误

419|页面已过期或“Facade\Ignition\Exceptions\ViewException 未定义变量:结果(查看: /Users/macair13/MeatracProject/resources/views/search/index.blade.php)"

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您需要包含 CSRF 令牌或从 CSRF 令牌检查中排除该 URL。

    <form ...>
        @csrf
        ...
    </form>
    

    Laravel 6.x Docs - CSRF

    此外,您没有将 results 变量从 Controller 的 index 方法传递给您的“搜索”视图。您需要检查 $results isset 是否在您的视图中或将其传递给您的视图。

    【讨论】:

    • 我现在添加了它我收到此错误“此集合实例上不存在属性 [id]。(查看:/Users/macair13/MeatracProject/resources/views/search/index.blade .php)" 这意味着结果变量在视图中不起作用,但在我使用 dd 时仍然可以工作
    • $results,复数...很多,它不是一个单一的结果,它可能有很多结果保存在一个集合中
    • 所以我要改变的只是复数到单数
    • 正确命名事物会有所帮助,但您的查询不是要求 1 条记录,而是要求很多...可能只有 1 条记录与查询匹配,但它始终在集合中因为get 电话
    • 那我该如何排序
    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-06
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多