laravel - 与“显示”功能不一致
问题描述
我已经在一个项目上工作了几个月,我觉得我发现公共功能秀的运作方式有些不一致
我有一个Location的模型和控制器
public function show(Location $Location)
{
$Loc = Location::with('company:id,name')->findOrFail($Location);
return response()->json($Loc,200);
}
这很好用。注意参数。
我刚刚为Asset制作了一个新模型和控制器,它有:
public function show(Asset $asset)
{
$AssetReturn = Asset::with('location:id,name,address')->findOrFail($asset);
return response()->json($AssetReturn,200);
}
但这不起作用。它只是返回空。如果我从参数中删除类名,那么它只是
public function show($asset)
然后它按预期工作。
资产模型与位置的关系:
public function location()
{
return $this->belongsTo(Location::class);
}
解决方案
根据文档,Laravel 自动解析定义在路由或控制器操作中的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配。例如:
Route::get('/assets/{asset}', function (App\Asset $asset) {
$asset->load('location:id,name,address');
return response()->json($asset);
});
由于$asset
变量被类型提示为App\Asset
Eloquent 模型,并且变量名称与{asset}
URI 段匹配,Laravel 将自动注入 ID 与请求 URI 中相应值匹配的模型实例。如果在数据库中没有找到匹配的模型实例,将自动生成 404 HTTP 响应。
如果您不想要这种行为并想findOrFail
手动使用:
Route::get('/assets/{asset}', function ($assetId) {
$asset = App\Asset::with('location:id,name,address')->findOrFail($assetId);
return response()->json($asset);
});
推荐阅读
- c# - 如何在 .NET 5.0 的默认浏览器中打开文本文件?
- android - Hilt 不会注入 Scoped ViewModel
- python - 使用 Python 图像库和 ImageTk.PhotoImage(Image.open("somefile.py")) 时如何保持纵横比
- c# - Newtonsoft.Json.Schema.JSchemaReaderException:'解析架构引用'#/definitions/Manager'时出错
- python - Python语音识别不说什么就开始
- sql - 返回 SQL 中出现次数等于 1 的 id 计数
- python - 读取 TH1D 的一个分支
- automation - 关于计划触发和自动启动的流程 (salesforce) 的问题
- java - Glassfish4 缺少名为 Files.Microsoft 的类
- azure-java-sdk - 如何使用加密和网络访问策略创建 Azure 托管磁盘快照?