我正在为laravel开发一个“简单”的api。该api必须处理过滤器,分页和对结果进行排序。为此,我使用laravel查询生成器。问题在于它正在进行选择而没有表名,例如:
select * order by `id` asc
我的代码:
public function index()
{
$request = request();
$query = DB::table('customers')->newQuery();
// Orden
if (request()->has('sort')) {
// Multiorden
$sorts = explode(',', request()->sort);
foreach ($sorts as $sort) {
list($sortCol, $sortDir) = explode('|', $sort);
$query = $query->orderBy($sortCol, $sortDir);
}
} else {
$query = $query->orderBy('id', 'asc');
}
//Filtros
if ($request->exists('filter')) {
$query->where(function($q) use($request) {
$value = "%{$request->filter}%";
$q->where('name', 'like', $value)
->orWhere('address', 'like', $value);
});
}
$perPage = request()->has('per_page') ? (int) request()->per_page : null;
$pagination = $query->get()->paginate($perPage);
$pagination->appends([
'sort' => request()->sort,
'filter' => request()->filter,
'per_page' => request()->per_page
]);
return response()->json(
$pagination
);
}
错误:
Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误: 1096文件中未使用任何表(SQL:按
id
asc选择*顺序) C:\ xampp \ htdocs \ iService \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection.php 在第664行
更新:
return DB::table('customers')->get();
如果我使用此功能,则api可以正常工作,我可以使用更多的api。问题是我需要查询生成器来处理过滤器,排序等...
答案 0 :(得分:0)
问题是我实例化新查询的方式。
$query = DB::table('customers')->newQuery();
正确:
$query = Model::query();
以我的示例为例:
$query = Customer::query();