#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Контроллеры»; » или просто добавьте эту строку, это сработает!