Laravel CRUD 搜索功能

Posted

技术标签:

【中文标题】Laravel CRUD 搜索功能【英文标题】:Laravel CRUD search function 【发布时间】:2021-12-17 17:55:38 【问题描述】:

我需要您的帮助,我该如何为我的 laravel crud 系统创建搜索功能? 我想做一个搜索功能,管理员可以搜索用户名,它就像一个过滤器,搜索后只显示与搜索相同的用户。

admin.users.index(刀片文件):

<div class="col-md-4">
  <form action="/search" method="GET">
  <div class="input-group">
    <input type="search" name="search" class="form-control">
    <span class="input-group-btn">
      <button type="submit" class="btn btn-primary">Keresés</button>
    </span>
  </div>
  </form>
</div>
    

    <div class="card">

    <table class="table">
  <thead>
    <tr>
      <th scope="col">Profilkép</th>
      <th scope="col">Név</th>
      <th scope="col">Email</th>
      <th scope="col">Telefonszám</th>
      <th scope="col">Műveletek</th>
    </tr>
  </thead>
  <tbody>
      @foreach($users as $user)
      <tr>
      <th scope="row"><img src="/uploads/avatars/ $user->avatar " style=" width:32x; height:32px; float:left; border-radius:50%; margin-right:25px;"></th>
      <td> $user->name </td>
      <td> $user->email </td>
      <td> $user->phone </td>
      
      <td>

      <a class="btn btn-sm btn-primary" href="  route('admin.users.edit', $user->id) " role="button">Szerkesztés</a>
      <button type="button" class="btn btn-sm btn-danger" onclick="event.preventDefault(); document.getElementById('delete-user-form- $user->id ').submit()">
            Törlés
      </button>
        <form id="delete-user-form- $user->id " action=" route('admin.users.destroy', $user->id) " method="POST" style="display: none;">
        @csrf
        @method("DELETE")
    </form>
      </td>
    </tr>
      @endforeach
      
  </tbody>
</table>
 $users->links() 
    </div>

UserController 搜索功能:

   public function index(Request $request)
    


        if(Gate::denies('logged-in'))
            dd('no acces');
        
        if(Gate::allows('is-admin'))
            return view('admin.users.index', ['users' => User::paginate(10)]);
        
        dd("adminnak kell lenned");
        $users = User::paginate(10);

        return view('admin.users.index')
                    ->with([
                        'users' => $users
                    ]);
    

    public function search(Request $request) 
        
        $search = $request->get('search');
        $users = User::table('users')->where('name', 'like', '%'.$search.'%')->paginate(10);
        return view('admin', ['users' => $users]);
    

我在 web.php 中没有路由,因为我不知道如何解决这个问题。 :( 请帮我! 谢谢你的回复!

【问题讨论】:

添加路线:阅读文档,很简单。但你不需要。您可以使用带有查询参数“搜索”的索引操作 你能帮我在代码中实现这个吗? 我不会为您编写代码,但会帮助您入门:将表单操作更改为索引路由,使用 $request-&gt;query('search') 读取查询参数。现在您只需使用 where like 语句(在您的索引操作中)在查询参数上创建一个 if 语句 【参考方案1】:
$('.table').DataTable(
        "paging": true,
        "pageLength": 10,
        "scrollY": 850,
        "scrollX": true,
        "columnDefs": [
            "targets": -1,
            "orderable": false,
        ,
        ],
        "ordering": false,
    );

将此命令放入 javascript

添加这个css

https://cdn.datatables.net/1.11.3/css/jquery.dataTables.min.css

添加这个js

https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js

这是没有任何内容的数据表搜索。如果你想使用这个方法。

【讨论】:

那不是问题。问题是关于使用控制器而不是客户端进行搜索。旁注,当你有一个大数据集时,DataTables 会失败。 那你需要发送请求并触发你的表 我知道,但真正的问题是,为什么要导入 jQuery 和 DataTables,来替换 1 个简单的 where 语句?除此之外,大多数开发人员正在远离 jQuery,因为 vanilla JS 基本上可以做到这一点。这对于问题中所需的功能来说太过分了。

以上是关于Laravel CRUD 搜索功能的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 标记 CRUD

Laravel展示产品-CRUD之show

Laravel 5.5 CRUD 表单选择的正确方法

Laravel编辑产品-CRUD之edit和update

php 简单的CRUD laravel

php Laravel CRUD路由惯例