Laravel数据库查询生成器错误与表名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel数据库查询生成器错误与表名称相关的知识,希望对你有一定的参考价值。

我正在为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文件C: xampp htdocs iService vendor laravel framework src Illuminate Database中没有使用的表(SQL:select * order by id asc)第664行的 Connection.php

更新:

return DB::table('customers')->get();

如果我使用它,api工作正常,我有更多的apis工作。问题是我需要Query Builder来处理过滤器,排序等...

enter image description here

答案

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

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

正确:

$query = Model::query();

对于我的例子:

$query = Customer::query();

以上是关于Laravel数据库查询生成器错误与表名称的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 laravel 5.5 中的查询生成器错误 sql 注入 *

获取错误列名称或提供的值的数量与表定义不匹配

将选定日期与表列或 MySQL 查询生成的日期数组进行比较

knex 查询与表名周围的引号

Laravel 查询生成器一般错误 2031

laravel 使用 in 子句模型名称连接多态数据透视表