Laravel spatie QueryBuilder GET 请求搜索

Posted

技术标签:

【中文标题】Laravel spatie QueryBuilder GET 请求搜索【英文标题】:Laravel spatie QueryBuilder GET request search 【发布时间】:2020-05-30 23:12:15 【问题描述】:

嘿,我是新手,请原谅这个问题。我正在尝试实施搜索并努力发送正确的 GET 请求。当我手动输入 URL 时它可以工作

http://127.0.0.1:8000/spsu?_token=kDRdTBZBwfO0l8UiFi1mcKmNOH7JEiNoxvUu7Fka&filter[name]=Peter&%5Bemail%5D=

但是,当我通过表单“过滤器[名称]”发送它时,我不知道如何添加它。

http://127.0.0.1:8000/spsu?_token=kDRdTBZBwfO0l8UiFi1mcKmNOH7JEiNoxvUu7Fka&name=Peter&%5Bemail%5D=

这是我的 SearchController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use Spatie\QueryBuilder\QueryBuilder;

class SearchController extends Controller

    public function __construct()
    
        $this->middleware('auth');
    

    public function spsu() 
        $users = QueryBuilder::for(User::class)
                ->allowedFilters(['name', 'email'])
                ->get();
        return view('suche', compact('users'));
    

这是刀片文件:

@extends('layouts.app')

@section('content')
            <div id="main-content" class="col-12">
                    <div class="col-md-6 text-right">
                        <form action="/spsu" method="GET" class="form-inline">
                            @csrf    
                            <div class="form-group">
                                <input type="text" class="form-control" name="name" placeholder="Keyword">
                            </div>
                            <div class="form-group">
                                <input type="text" class="form-control" name="[email]" placeholder="Keyword">
                            </div>
                            <div class="form-group">
                                <button class="btn btn-dark" type="submit">Search</button>
                            </div>
                        </form>
                    </div>
                    <div class="table-responsive">
                        <table class="table table-hover">
                            <thead>
                                <tr>
                                    <th>Detail</th>
                                    <th ></th>
                                </tr>
                            </thead>
                            <tbody>
                                @forelse($users as $user)
                                    <tr>
                                        <td>
                                            <u>
                                                 $user->name 
                                            </u>
                                            <br>
                                            <p>
                                                 $user->email 
                                            </p>
                                        </td>
                                    </tr>
                                @empty
                                    <tr>
                                        <td colspan="2" align="center">
                                            Empty data
                                        </td>
                                    </tr>
                                @endforelse
                            </tbody>
                        </table>
                    </div>
            </div>
@endsection

在我的 web.php 中:

Route::get('/spsu', 'SearchController@spsu');

我希望有人可以提供帮助。亲切的问候!

【问题讨论】:

【参考方案1】:

您应该使用filter[&lt;field&gt;] 作为输入名称。

例如,将 name='email' 改为 name='filter[email]'

【讨论】:

我很高兴它有帮助。接受答案让别人知道。

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

如何使用 laravel 8 +jetstream + spatie 为注册用户分配角色

Spatie / Laravel cors在生产中的问题[重复]

它是如何工作的 ?使用 Spatie/laravel-cronless-schedule 自定义的 Laravel 时间表

Spatie/Newsletter:Laravel 5.6 中提供的 MailChimp 无效 MailChimp API 密钥

php Laravel Spatie状态获取最新状态

php Laravel上传Spatie Media Libary