首页 > 解决方案 > 将模型返回为 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,它可以工作,但会将数字转换为字符串。

我的模型:

在此处输入图像描述

我的后端:

标签: phplaravellaravel-5eloquentphp-5.6

解决方案


成本 id 不应该是可填充的,这是您的主键,很可能设置为自动递增,也不应该强制转换,因为主键应该是一个自动递增的整数

但是,您是否仍希望遵循此设计并让 cost_id 可填写

1 - 确保它是整数或字符串 2 - 如果不需要,请不要大小写 3 - 可能,在您的控制器中尝试正常响应,例如response()->json(MyModel::orderBy('name')->get());

我不保证上面会为你工作,因为它看起来确实很奇怪,你检查过你的数据库并确保这个特定记录的 cost_id 没问题吗?因为是整数而不是字符串?它不是空的吗?

让我知道事情的后续

还有一个旁注:

我建议使用作为主键和自动增量的普通 ID 字段


推荐阅读