Php 条件查询&;Laravel 7中的分页

Php 条件查询&;Laravel 7中的分页,php,laravel,eloquent,pagination,laravel-7,Php,Laravel,Eloquent,Pagination,Laravel 7,$vistors将返回vistors表中的所有数据 如果$visitor->ip!='127.0.0.1'当从客户端请求$inputs['hideMe']==true时 看法 路线 我有 当我这么做的时候,它似乎不起作用。 因为我在视图中使用了paginate,所以我会一直遇到这个错误 使用数组上的QueryString()调用成员函数 结果 这是完美的工作 ✅ http://app.test/visitor?interval=day ✅ http://app.test/visitor?in

$vistors将返回
vistors
表中的所有数据

如果
$visitor->ip!='127.0.0.1'
当从客户端请求
$inputs['hideMe']==true时

看法

路线 我有 当我这么做的时候,它似乎不起作用。 因为我在视图中使用了paginate,所以我会一直遇到这个错误

使用数组上的QueryString()调用成员函数

结果 这是完美的工作

  • ✅ <代码>http://app.test/visitor?interval=day
  • ✅ <代码>http://app.test/visitor?interval=week
  • ✅ <代码>http://app.test/visitor?interval=month
  • ✅ <代码>http://app.test/visitor?interval=year
  • 这根本不起作用

    • ❌ <代码>http://app.test/visitor?interval=week&hideMe=true

    关于如何向我的查询添加逻辑有什么建议吗?

    我理解您试图使用
    $inputs
    变量做什么。以更传统的基于Laravel route/controller集合的路径加载信息可能更容易

    尝试使用以下参数添加路由:

    Route::get('/visitor/{interval}/{hideMe}','VisitorController@index');
    
    然后在索引上:

    public function index($interval, $hideMe){}
    
    或者,如果您不想这样做,您可以使用
    request()
    帮助程序直接在
    index
    方法中使用集合,而不是传递给新的数组变量,而不是该方法中的另一个函数:

     $hideMe  = request()->input('hideMe');
    

    这是因为如果触发了
    hideMe()
    ,则
    $visitor
    是一个
    数组
    ,否则,它是一个数组。是
    AbstractPaginator
    的一种方法。因此,如果
    $visitor
    只是一个原生PHP
    数组,那么当然不能使用
    $visitors->withQueryString()

    这里的解决方案是在查询构建阶段使用IP
    '127.0.0.1'
    '24.62.137.111'
    过滤掉行。像这样:

    开关($interval){
    案件日期:
    $q=Visitor::where('created_at','>',now()->today());
    打破
    “一周”案例:
    $q=Visitor::where('created_at','>',now()->subWeek());
    打破
    个案‘月份’:
    $q=Visitor::where('created_at','>',now()->subMonth());
    打破
    案件‘年份’:
    $q=Visitor::where('created_at','>',now()->subYear());
    打破
    违约:
    $q=Visitor::orderBy('updated_at','desc');
    打破
    }
    if($inputs['hideMe'])){
    $q=$q->whereNotIn('ip',['127.0.0.1','24.62.137.111']);
    }
    $data=$q->分页(15);
    
    我还没有测试我的代码,但你知道了


    另外,根据经验,在Laravel中始终使用
    Collection
    S,而不是PHP数组,除非是方法参数,如果您想轻松地对它们进行单元测试。

    获得方法的路径是什么?我添加了路径
    route::get('/visitor','VisitorController@index');你能说明索引方法是如何初始化的吗?IE如何将
    $inputs
    变量放入
    hideme()
    方法?这是否在加载该视图的
    index()
    ?我将只共享我的
    VisitorController
    的整个
    index()
    。您是否获得$hideMe参数?您确定这是答案吗?是的,它肯定是答案的一部分。这是一种比在函数中包含函数更干净的方法。直接使用助手也有助于提高效率。然后,按照Daniel的建议使用where()查询,它就可以工作了。在开始查询之前,您还有几个问题需要改进,这正是我在上面推荐的。@cyber8200嗯。。。根据我目前掌握的信息,我不确定。但是,如果您认为与查询相关的另一个问题(而不是如何对查询结果进行分页)可能会问另一个问题,并包括查询和一些示例数据,其中包含不应该出现在结果中的行。
    Route::get('/visitor/{interval}/{hideMe}','VisitorController@index');
    
    public function index($interval, $hideMe){}
    
     $hideMe  = request()->input('hideMe');