我正在使用批量分配来创建服务器模型,如下所示:
/** @var Model $server */
$server = Server::create($request->all());
return response($server->jsonSerialize(), Response::HTTP_CREATED);
现在我的服务器还具有一个status
属性,该属性映射到一个MySQL status
列,该列在MySQL中的默认值为0。
由于状态不是在我的请求属性中隐式设置的(不需要,因为默认值很好),因此不会在模型上返回status
属性。但是它将返回我的$request->all()
中的所有属性。这些经过验证并且来自表单。
如何返回完整的$server
模型,包括status
的默认值?我被迫触发另一个查询以重新获取刚刚创建的模型,只是这样我也可以在MySQL默认值中包含status
属性?
答案 0 :(得分:1)
插入后它不会进行选择,因此您不会获得数据库必须设置的任何值。不过,您可以刷新模型实例(使其选择该行):
$model->refresh();
答案 1 :(得分:0)
如果您将其返回为JSON
,则可以将status
添加到protected $appends = ["status"];
class Server extends Model {
protected $appends = ["status"];
...
}
这样,即使您没有在status
方法中设置Server::create()
,它也应该在JSON
响应中以{{ 1}}。另外,也许将您的收益调整为
server.status
由于return response()->json(["server" => $server], 200); // or whatever HTTP code you need.
仅与$appends
一起使用,因此也许使用accessors
为要在JSON响应中返回的数据“填补空白”:
$request->merge()
由于响应返回了$request->merge([
"status" => "active", // Or whatever the default is from the database
...
]);
中的所有内容,因此将其与MySQL的默认值合并。注意:当前采用硬编码,如果更改了迁移/模式,则需要更新,或者通过SQL命令获取默认值。