【发布时间】:2020-03-18 12:32:26
【问题描述】:
我有一个 laravel 表,其中包含我在迁移中这样定义的列:
$table->json('json');
在模型中,我将其转换为数组:
protected $casts = [
'json' => 'array'
];
这在我需要它的大部分时间都非常有效,但是我正在调用一个 api 调用,我实际上希望我的模型集合为我提供原始字符串,而不是将其转换为数组。
所以,假设我的模型名为 Model,我的 api 调用如下所示:
$systemModels = Model::whereNull('user_id')->get();
$userModels = Model::where('user_id', $user->id)->get();
return response()->json([
'user_models' => $userModels->toArray(),
'system_models' => $systemModels->toArray()
]);
这是我希望将模型的“json”列呈现为字符串而不是强制转换为数组的地方。有可靠的方法吗?
【问题讨论】:
-
我接受一种可能性是我从模型中移除演员表并在我确实需要它作为数组的地方使用
json_decode,但我只是不确定 Laravel 是否有设施做我在这里问的,我想知道。 -
我认为你可以设置一个 mutator。将字段转换为数组的一种。如果 Laravel 在处理强制转换数组之前设置了属性,那么也许你可以通过定义一个 getter 来获取原始字符串......
-
所以你希望api返回
{"json": "[1, 2]"}而不是{"json": [1, 2]}?我会对你的 api tbh 感到非常恼火。 -
@Jerodev 是的!但是我的 api 的用例,在这个特定的端点上返回它是有意义的。你不会生气,因为你永远不需要将它作为一个对象,作为我的 api 的消费者来访问。您只想更改字符串。