【问题标题】:Why age filter doesn't filter the age using sql query in laravel?为什么年龄过滤器不使用 laravel 中的 sql 查询过滤年龄?
【发布时间】:2018-12-24 18:39:38
【问题描述】:

我想根据年龄查询人员列表。然后,查询将使用 lahir_yy 列(出生年份值)计算年龄并搜索列表。

   $newitem = DB::table('itemregistrations')
                ->when(request('age'), function($query){
                    $query->whereRaw('YEAR(CURDATE()) - lahir_yy >= ?', [request('age')]);})
   ->get(); 

但是,代码不起作用。它不过滤年龄但不报错。

【问题讨论】:

  • request('age') 不会抛出错误?另外,闭包函数的闭包} 在哪里?
  • 它不会抛出任何错误..我已经更新了问题,留下了要复制的闭括号。
  • 添加这个 ->select(['*', DB::raw('YEAR(CURDATE()) - lahir_yy as age')]),并附上dd($newitem)的结果。跨度>
  • 抱歉回复晚了..离开一段时间..我试过上面的代码,它在数组列表中添加了年龄。
  • 谢谢 IndianCoding,我已经尝试过并再次检查代码..我只是注意到年龄文本字段的变量不同..一旦我更改了它,您的代码运行良好...谢谢非常抱歉之前没有注意到这些错误。

标签: mysql laravel-5 filter


【解决方案1】:

尝试用小零钱。在结束时发送request('age')。希望这会奏效。

$newitem = DB::table('itemregistrations')
            ->when(request('age'), function($query){
                return $query->whereRaw('YEAR(CURDATE()) - lahir_yy >= ?', [request('age')]);})
->get(); 

【讨论】:

  • reuqest() 不是变量,request() 是全局辅助函数。你不能(它会抛出错误)并且不需要在闭包中发送函数。
  • @IndianCoding 谢谢没想到。所以我猜在闭包查询中缺少return关键字。
  • 好吧,同样的情况)这里不需要使用return。
  • 感谢您的贡献..Prashant
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2021-10-22
  • 1970-01-01
  • 2021-12-07
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多