当我尝试在 JSController 的 show 方法中访问模型 (JenisSurvey) 的 ID 时,即使模型已正确检索,该 ID 始终为 null。有趣的是,我的应用程序中有其他控制器,类似的操作可以完美地工作。例如,如果我在不同的控制器中使用用户模型,我可以毫无问题地访问 ID。
我已经检查了路由配置、模型绑定、自动加载文件、控制器逻辑以及数据库中存在搜索到的 ID 的数据。一切似乎都井井有条,逻辑反映了其他类似操作的控制器的逻辑。
这是 JSController 中 show 方法的简化版本:
public function show(JenisSurvey $jenisSurvey)
{
dd($jenisSurvey->id); // This always returns null
if (!$jenisSurvey) {
return response()->json(['error' => 'Data not found.'], 404);
}
return new JSResource($jenisSurvey);
}
有趣的是,我的应用程序中有其他控制器,类似的操作可以完美地工作。例如,如果我在不同的控制器 (UserController) 中使用 User 模型,我可以毫无问题地访问 ID。这是 UserController 中 show 方法的简化版本,用于比较:
public function show(User $user)
{
dd($user->id); // This returns the correct ID
return new UserResource($user);
}
此外,当我将 UserController 中的模型和资源切换到 JenisSurvey 时,它按预期工作。
// UserController but with jenis survey model and resource
public function show(JenisSurvey $user)
{
dd($user->id); // This returns the correct ID
return new JSResource($user);
}
路线如下:
Route::group(['namespace' => 'App\Http\Controllers', 'middleware' => 'auth:sanctum'],function () {
Route::apiResource('users', UserController::class)->middleware(['auth','verified','role:admin']);
Route::apiResource('js', JSController::class)->middleware(['auth','verified','role:admin|nasabah']);
});
下面是截图。
JSController(Jenis Survey 控制器):
UserController 使用用户的模型和资源:
使用 JenisSurvey 模型和资源的 UserController:
JSController(var 转储整个模型):
UserController(带有 Jenis Survey 模型和资源):
鉴于该问题似乎特定于 JSController (Jenis Survey Controller) 文件,我怀疑其设置或环境可能有一些独特之处。任何有关如何进一步解决此问题的见解或建议将不胜感激。
当您提供给资源路由构建器的所有内容都是
jenisSurvey
时,您不应假设资源名称为 js
。
通过快速测试 L10:
Route::apiResource('js', TestController::class);
php artisan route:list --path=api/js
显示:
GET|HEAD api/js .................... js.index
POST api/js .................... js.store
GET|HEAD api/js/{j} ................ js.show
PUT|PATCH api/js/{j} ................ js.update
DELETE api/js/{j} ................ js.destroy
因此控制器中的资源将被称为
$j
如果你想保持相同的路由结构,你可以覆盖路由声明中自动生成的名称
Route::apiResource('js', TestController::class)->parameter('js', 'jenisSurvey');