Laravel 8:Illuminate\Database\QueryException:SQLSTATE[22P0



我在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);
}
}

要么我在App\Coa中使用DB或模型,它总是导致以下错误:

IlluminateDatabaseQueryException: SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type integer: "find" (SQL: select * from "coa" where "id" = 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 "coa" where "id" = find limit 1?无论我更换控制器,总是会出现错误。但其他方法(index、show($id(、destroy(也可以。只是这个还是一团糟。

我不知道它是如何工作的,但我更改了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/方法不能先写并导致那个错误吗?

Laravel 8路由控制器绑定中的第一件事已经更改,使您的路由能够工作

路由::get('ca/find','设置\CoaController@findCoa'(;

您应该更新您的"RouteServiceProvider.php";确实找到";protected$namespace="App\Http\Controllers"或者加上这行就行了!

最新更新