如何在laravel中显示搜索结果

时间:2019-06-23 11:31:57

标签: laravel

我无法使用laravel显示搜索结果。以下是路线,控制器和视图的代码:

路线:

Route::resource('search', 'SearchController');

控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Order;
use Redirect;
use Auth;
use DB;

class SearchController extends Controller
{
    public function index(Request $request)
    {
        $order = Order::all();
        return view(search.index', compact(search));
    }

    public function search(Request $request)
    {
        $search = $request->search;

        $order = DB::table('order')
            ->where('custName','like',"%".$search."%");

        return view('search.index',compact('search'));
    }
}

视图

<form action="search" method="GET">
    <input type="text" name="custName" class="form-control" <br>
                <button type="submit" class="btn btn-primary">SEARCH</button>
            </div>
        </div>
        <table class="table table-bordered" width="500">
            <tr>
                <td><font color="white">RESULT :</font></td>
            </tr>
            @foreach($order as $order)
            <tr>
                <td>{{ $order->custName }}</td>
                <td>{{ $order->orderStatus }}</td>
            </tr>
            @endforeach
        </table>

目录位置

c:/xampp/htdocs/web/resources/views/search/index.blade.php

显示错误

Undefined variable: order (View: c:\xampp\htdocs\web\resources\views\search\index.blade.php)

上面是我在数据库中搜索记录的代码。但是结果总是不确定的变量。

如何使用上面的代码显示搜索结果。谢谢

3 个答案:

答案 0 :(得分:1)

您共享的代码存在一些问题,我尝试告诉我所看到的。

  1. Route :: resource中存在拼写错误,您在其中编码了 seearch

  2. 而不是 search
  3. 对于搜索方法,您提供的路线未在任何地方使用它。您可以在this question

  4. 上查看Route :: resource的方法和视图的更多详细信息。
  5. 现在考虑到您正在从公共功能索引方法中加载 index.blade.php ,因此紧凑型的使用很麻烦。 At this page,您将看到结构紧凑,不同之处以及使用方法。这里的主要问题是您实际上根本没有将订单传递给视图。
  6. 最后但并非最不重要的是,优良作法是将具有值集合的项目命名为复数。例如,此处的订单应更改为订单。这样可以防止在foreach中滥用它。在您的foreach中,迭代数组的名称和保存数据的temp变量应该不同,否则,它们将发生冲突。 在这里,您在相同的作用域中有2个称为order的变量。

答案 1 :(得分:0)

在Controller搜索方法中,将搜索结果分配给 $ orders

$orders = DB::table('order')
            ->where('custName','like',"%".$search."%");

然后将其发送到视图:

 return view('search.index',compact('orders'));

并在视图中执行以下操作:

@foreach($orders as $order)
   <tr>
      <td>{{ $order->custName }}</td>
      <td>{{ $order->orderStatus }}</td>
   </tr>
 @endforeach

它将解决您的问题。

答案 2 :(得分:0)

例如我有记录:

  1. a
  2. aa
  3. aaa
  4. b
  5. c
  6. d
  7. e

该代码显示从1号到7号的所有记录。 但是现在它解决了,我在index()部分的控制器中修复了代码,如下所示

 public function index()
 {
        return view('search.index', compact('order'));
 }

 public function search(Request $request)
 {
        $search = $request->search;
        $order = DB::table('order')->where('custName', 'like', "%".$search."%")->get();

        return view('search.result', compact('order'));
    }