Ошибка в построителе запросов к базе данных Laravel с именем таблицы

#laravel #eloquent #laravel-query-builder

#laravel #eloquent #laravel-query-builder

Вопрос:

Я создаю «простой» API для laravel. Этот API должен обрабатывать фильтры, разбивку на страницы и сортировку результата. Для этого я использую laravel Query Builder. Проблема в том, что он выполняет выбор без имени таблицы, например:

 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:xampphtdocsiServicevendorlaravelframeworksrcIlluminateDatabaseConnection.php в строке 664

Обновить:

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

Если я использую это, API работает нормально, у меня работают другие API. Проблема в том, что мне нужен конструктор запросов для обработки фильтров, сортировки и т.д…

введите описание изображения здесь

Комментарии:

1. верны ли ваши учетные данные базы данных? могу ли я увидеть скриншот этого?

2. судя по вашему сообщению об ошибке, похоже, что вашему построителю запросов не удалось найти таблицу «клиенты», поэтому вы не можете найти столбец «id»: (SQL: select * order by id asc) в файле

3. @Noctis17 мне кажется, что я совершаю ошибку в построителе запросов, потому что с помощью -> get () вместо -> newQuery() я получаю все данные обратно. Если у меня ошибка разрешений, другая функция не будет работать.

Ответ №1:

Проблема заключалась в том, как я создавал экземпляр нового запроса.

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

Исправить:

 $query = Model::query();
  

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

 $query = Customer::query();