【问题标题】:how to display search result in laravel如何在laravel中显示搜索结果
【发布时间】:2019-11-05 11:38:41
【问题描述】:

我无法使用 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)

以上是我在数据库中搜索记录的代码。但结果总是未定义的变量。

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

【问题讨论】:

  • $order 传递给view,将这一行return view(search.index', compact(search)); 改为return view(search.index', compact('order'));

标签: laravel


【解决方案1】:

例如我有记录:

  1. 一个
  2. aaa
  3. b
  4. c
  5. d
  6. e

代码显示所有记录 no1 到 no7。 但现在它解决了我在 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'));
    }

【讨论】:

    【解决方案2】:

    在您的 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
    

    它会解决你的问题。

    【讨论】:

    • 它显示所有记录,而不是特定/特定名称。我想做的是。当用户键入“maxwell”时,结果显示“maxwell”并非所有记录。请指出我如何在 laravel 中做到这一点
    • @mogleng,'它显示所有记录,而不是特定/特定名称'和'显示“maxwell”不是所有记录'是什么意思?您的搜索查询是 "%".$search."%" ,即它会返回所有在 'custName' 列的值中具有 'maxwell' 的行,无论它在哪里,即使是在单词的中间。例如:麦克斯韦、麦克斯韦先生、麦克斯韦我的名字
    • 例如我有 aaa aaa b c d mr d
    • @mogleng,如果你仍然遇到问题,你可以发布你的输出截图
    【解决方案3】:

    你分享的代码有一些问题,我试着告诉我看到的人。

    1. Route::resource 中有一个拼写错误,您使用 search

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

    4. 上查看有关方法和视图的 Route::resource 的更多详细信息
    5. 现在考虑到你是从public function index方法加载index.blade.php,所以compact的使用很麻烦。 At this page,你可以看到 compact 和 with 的不同以及如何使用它。这里的主要问题是您实际上根本没有将订单传递给您的视图。
    6. 最后但并非最不重要的一点是,最好将具有复数值集合的项目命名。例如,这里的 order 应更改为 orders。这将防止在 foreach 中滥用它。在您的 foreach 中,迭代数组的名称和保存数据的临时变量应该不同,否则它们会发生冲突。 这里有 2 个变量,在同一范围内称为 order

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2016-12-11
      • 1970-01-01
      • 2015-04-14
      相关资源
      最近更新 更多