php - 将模型返回为 JSON 时,Laravel 将整数转换为 NULL
问题描述
这是我一生中见过的最奇怪的错误,我不知道如何解释,但它正在发生。
从控制器返回模型列表时:
public function index()
{
return MyModel::orderBy('name')->get();
}
现在,如果我切换到:
public function index()
{
return MyModel::orderBy('name')->get()->toArray();
}
我在浏览器中收到以下反馈:
在尝试找到一个解决方案以便我不需要调用该toArray()
函数后,我发现通过覆盖jsonSerialize()
下面示例中的方法,在MyModel
类中,它正确地将 转换cost_id
为数字。
public function jsonSerialize()
{
return parent::jsonSerialize();
}
如果我将该字段作为字符串放在 中$casts
,它可以工作,但会将数字转换为字符串。
我的模型:
我的后端:
- PHP 5.6.40
- 拉拉维尔 5.4
- 数据库是 DBMaker
解决方案
成本 id 不应该是可填充的,这是您的主键,很可能设置为自动递增,也不应该强制转换,因为主键应该是一个自动递增的整数
但是,您是否仍希望遵循此设计并让 cost_id 可填写
1 - 确保它是整数或字符串 2 - 如果不需要,请不要大小写 3 - 可能,在您的控制器中尝试正常响应,例如response()->json(MyModel::orderBy('name')->get());
我不保证上面会为你工作,因为它看起来确实很奇怪,你检查过你的数据库并确保这个特定记录的 cost_id 没问题吗?因为是整数而不是字符串?它不是空的吗?
让我知道事情的后续
还有一个旁注:
我建议使用作为主键和自动增量的普通 ID 字段
推荐阅读
- django - django 路径无法识别其预期视图
- javascript - 在 mongodb 中插入 API 调用
- autodesk-forge - `viewer.navigation.fitBounds` 没有边距
- ajax - 将二维数组从 ajax 数据传递到控制器总是返回一个空值 Asp.Net
- javascript - 如何从 js 文件中导出任何内容?
- javascript - 如何通过单击选择选项访问选择框中的属性名称的值?
- python - 我试图让按钮在 tkinter 中单击后消失,但它的显示错误如 nonetype 对象没有属性 pack_forget()
- node.js - 哪个linux版本在windows 7上支持node js
- javascript - 几个错误而不是一个
- python - 如何将行转换为列表