带有表名的Laravel数据库查询生成器错误

时间:2019-04-02 01:29:17

标签: laravel eloquent laravel-query-builder

我正在为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。问题是我需要查询生成器来处理过滤器,排序等...

enter image description here

1 个答案:

答案 0 :(得分:0)

问题是我实例化新查询的方式。

$query = DB::table('customers')->newQuery();

正确:

$query = Model::query();

以我的示例为例:

$query = Customer::query();