0

我在 Laravel 7 中有项目并且它有效。但是,由于某些原因,我想重构到 Laravel 8。其他的还可以,但是这一条路线有问题。

这是我在 L7(有效)和 L8(错误)中的路由代码:Route api.php:

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

L8:
Route::get('coa/find', 'Setting\CoaController@findCoa');

这是我的控制器(相同的代码):

namespace App\Http\Controllers\Setting;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use Illuminate\Support\Facades\Validator;
use App\Coa;

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 或模型,总是导致此错误:

Illuminate\Database\QueryException: 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?无论我更改控制器,它总是会导致该错误。但其他方法(索引、显示($id)、销毁)都可以。就这一个还是乱七八糟的。

4

2 回答 2

0

我不知道它是如何工作的,但我从这里更改了 api.php:

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

对此:

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

这两种方法都有效!

谁能解释一下,为什么 show api/method 不能先写并导致该错误?

于 2021-07-12T01:47:46.323 回答
0

Laravel 8 路由控制器绑定中的第一件事已更改以使您的路由正常工作

Route::get('coa/find', 'Setting\CoaController@findCoa');

你应该更新你的“RouteServiceProvider.php”,找到“protected $namespace = 'App\Http\Controllers';” 或者只是添加这一行这将工作!

于 2021-07-12T06:53:39.427 回答