Laravel 8: Исключение IlluminateDatabaseQueryException: SQLSTATE[22P02]: Неверное представление текста: 7 ОШИБКА: неверный синтаксис ввода для типа integer

#laravel #api

Вопрос:

У меня есть проект в Laravel 7, и он сработал. Но по некоторым причинам я хочу провести рефакторинг на Laravel 8. Другие в порядке, но у этого маршрута есть проблема.

Вот мой код маршрута в L7 (сработал) и L8 (ошибка): Маршрут api.php:

 L7:
Route::get('/coa/find', [SettingCoaController::Class, 'findCoa']);

L8:
Route::get('coa/find', 'SettingCoaController@findCoa');
 

И это мой контроллер (тот же код):

 namespace AppHttpControllersSetting;

use AppHttpControllersController;
use IlluminateHttpRequest;
use DB;
use IlluminateSupportFacadesValidator;
use AppCoa;

class CoaController extends Controller
{
    public function findCoa(Request $request)
    {
        $isi = $request -> isi; 
        $findCoa = Coa::where('coaid', 'ilike', "%" . $isi . "%")
        ->orWhere('deskripsi', 'ilike', "%" . $isi . "%")
        ->paginate(20);
        // $findCoa = DB::table('coa')
        // ->where('coaid', 'ilike', "%" . $isi . "%")
        // ->orWhere('deskripsi', 'ilike', "%" . $isi . "%")
        // ->paginate(20);

        return response()->json($findCoa);
    }
 }
 

Либо я использую БД, либо модель в приложенииCoa, это всегда приводит к этой ошибке:

 IlluminateDatabaseQueryException: SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type integer: amp;quot;findamp;quot; (SQL: select * from amp;quot;coaamp;quot; where amp;quot;idamp;quot; = find limit 1) in file /Users/yosep/Dropbox/projects/Laravel8/kie-l8/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 692
 

Я не понял, почему запрос стал:
select * from amp;quot;coaamp;quot; where amp;quot;idamp;quot; = find limit 1 ? Независимо от того, меняю ли я контроллер, это всегда приводит к этой ошибке. Но другие методы (индекс, показать($id), уничтожить) в порядке. Только этот все еще испорчен.

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

1. Уже пробовал, но все равно не повезло, сообщение об ошибке все то же самое. Запрос по ошибке не совпадает с контроллером.

Ответ №1:

Я не знаю, как это работает, но я меняю api.php, из этого:

 Route::get('/coa/{id}', [SettingCoaController::Class, 'show']);
Route::get('coa/cari', [SettingCoaController::Class, 'findCoa']);

 

к этому:

 Route::get('coa/cari', [SettingCoaController::Class, 'findCoa']);
Route::get('/coa/{id}', [SettingCoaController::Class, 'show']);
 

И то и другое работает!

Может ли кто-нибудь объяснить, почему show api/метод не смог написать первым и привел к этой ошибке?

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

1. При первой настройке маршрута, когда вы звоните /coa/cari , ваш маршрут '/coa/{id}' выбирается первым (в основном говорится «URL , начинающийся с /coa/ , а затем что угодно). Вы также можете ограничить параметр {id} использованием только целых чисел с использованием ограничений регулярных выражений , что должно заставить ваши маршруты работать так же, как в вашей первой настройке

Ответ №2:

Первое, что было изменено в привязке контроллера маршрута Laravel 8, чтобы ваш маршрут работал

Маршрут::get(«coa/найти», «НастройкаCoaController@findCoa»);

Вам следует обновить свой «RouteServiceProvider.php» найдите «защищенное пространство имен $ = » ПриложениеHttpКонтроллеры»; » или просто добавьте эту строку, это сработает!