Laravel 5.6:如何制作 App\sys_data::where($moreWhere)->paginate(10);工作?
Laravel 5.6: How to make App\sys_data::where($moreWhere)->paginate(10); work?
我的数据库中有三个不同的列。我想允许用户根据 his/her 需要从这些列中获取数据。用户可以选择从所有列中获取所有数据,或者用户可以选择有关列的特定信息。
$moreWhere="";
if($request->status != 'all')
$moreWhere="['status', '=', '$request->status'],";
if($request->category != 'all')
$moreWhere = $moreWhere . "['cat', '=', '$request->cat'],";
if($request->type != 'all')
$moreWhere = $moreWhere . "['type', '=', '$request->type']";
$moreWhere = '[' . $moreWhere . ']';
$showData = sys_data::where($moreWhere)->wherebetween('date', [$request->from_date, $request->to_date])->paginate(10);
我遇到的问题是,当我将 $moreWhere 变量传递给 eqlouent 的 "where" 子句时,出现错误。
它给我以下错误。
Illuminate \ Database \ QueryException (42S22)
SQLSTATE[42S22]: Column not found: 1054 Unknown column
'[['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']]'
in 'where clause' (SQL: select count(*) as aggregate
from `sys_data` where `[['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']]` = ``
and `date` between 2018-09-01 and 2018-09-03)
如果我手动添加
[['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']]
作为 "where" 的参数,如下所示
sys_data::where([['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']])
那么它就像一个魅力。
然而,同样的东西保存在一个变量中并分配给 "where",就是行不通的。我错过了什么吗?
很抱歉,我是 Laravel 和编程的新手,如有任何帮助,我们将不胜感激。同样,如果此处相关,我将使用 Laravel 5.6。
谢谢
如果您想根据其他设置向查询动态添加 where 语句,您可以使用变量开始查询或在 where
调用中添加闭包。
选项 1:
$query = sys_data::query();
if($request->status != 'all')
$query->where('status', $request->status);
if($request->category != 'all')
$query->where('cat', $request->cat);
if($request->type != 'all')
$query->where('type', $request->type);
$query->wherebetween('date', [$request->from_date, $request->to_date])->paginate(10);
$showData = $query;
选项 2:
$showData = sys_data::where(function($query){
if($request->status != 'all')
$query->where('status', $request->status);
if($request->category != 'all')
$query->where('cat', $request->cat);
if($request->type != 'all')
$query->where('type', $request->type);
return $query;
})->wherebetween('date', [$request->from_date, $request->to_date])->paginate(10);
您可以像这样在模型对象中添加 where 条件
$showData = sys_data::wherebetween('date', [$request->from_date, $request->to_date]);
if($request->status != 'all')
$showData->where('status',$request->status);
if($request->category != 'all')
$showData->where('cat',$request->cat);
if($request->type != 'all');
$showData->where('type',$request->type);
$showData->get()->paginate(10);
我的数据库中有三个不同的列。我想允许用户根据 his/her 需要从这些列中获取数据。用户可以选择从所有列中获取所有数据,或者用户可以选择有关列的特定信息。
$moreWhere="";
if($request->status != 'all')
$moreWhere="['status', '=', '$request->status'],";
if($request->category != 'all')
$moreWhere = $moreWhere . "['cat', '=', '$request->cat'],";
if($request->type != 'all')
$moreWhere = $moreWhere . "['type', '=', '$request->type']";
$moreWhere = '[' . $moreWhere . ']';
$showData = sys_data::where($moreWhere)->wherebetween('date', [$request->from_date, $request->to_date])->paginate(10);
我遇到的问题是,当我将 $moreWhere 变量传递给 eqlouent 的 "where" 子句时,出现错误。
它给我以下错误。
Illuminate \ Database \ QueryException (42S22)
SQLSTATE[42S22]: Column not found: 1054 Unknown column
'[['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']]'
in 'where clause' (SQL: select count(*) as aggregate
from `sys_data` where `[['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']]` = ``
and `date` between 2018-09-01 and 2018-09-03)
如果我手动添加
[['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']]
作为 "where" 的参数,如下所示
sys_data::where([['status', '=', 'Yes'],['cat', '=', 'Food'],['type', '=', 'Free']])
那么它就像一个魅力。
然而,同样的东西保存在一个变量中并分配给 "where",就是行不通的。我错过了什么吗?
很抱歉,我是 Laravel 和编程的新手,如有任何帮助,我们将不胜感激。同样,如果此处相关,我将使用 Laravel 5.6。
谢谢
如果您想根据其他设置向查询动态添加 where 语句,您可以使用变量开始查询或在 where
调用中添加闭包。
选项 1:
$query = sys_data::query();
if($request->status != 'all')
$query->where('status', $request->status);
if($request->category != 'all')
$query->where('cat', $request->cat);
if($request->type != 'all')
$query->where('type', $request->type);
$query->wherebetween('date', [$request->from_date, $request->to_date])->paginate(10);
$showData = $query;
选项 2:
$showData = sys_data::where(function($query){
if($request->status != 'all')
$query->where('status', $request->status);
if($request->category != 'all')
$query->where('cat', $request->cat);
if($request->type != 'all')
$query->where('type', $request->type);
return $query;
})->wherebetween('date', [$request->from_date, $request->to_date])->paginate(10);
您可以像这样在模型对象中添加 where 条件
$showData = sys_data::wherebetween('date', [$request->from_date, $request->to_date]);
if($request->status != 'all')
$showData->where('status',$request->status);
if($request->category != 'all')
$showData->where('cat',$request->cat);
if($request->type != 'all');
$showData->where('type',$request->type);
$showData->get()->paginate(10);