Laravel Database Query Builder ошибка с именем таблицы - PullRequest
1 голос
/ 02 апреля 2019

Я делаю "простой" API для Laravel.Этот 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
    );
}

Ошибка:

Подсветить \База данных \ 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-интерфейса.Проблема в том, что мне нужен Query Builder для обработки фильтров, сортировки и т. Д. *

enter image description here

1 Ответ

0 голосов
/ 02 апреля 2019

Проблема была в том, как я создаю новый запрос.

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

Правильно:

$query = Model::query();

Для моего примера:

$query = Customer::query();
...