如何 return 模型质量分配的默认列值?

How to return a default column value for mass assignment of a model?

我正在使用批量分配创建服务器模型,如下所示:

/** @var Model $server */
$server = Server::create($request->all());

return response($server->jsonSerialize(), Response::HTTP_CREATED);

现在我的服务器也有一个 status 属性 映射到 MySQL status 列,该列在 MySQL 中的默认值为 0。

因为状态没有在我的请求属性中隐式设置(不需要,因为默认设置很好)它不会 return 模型上的 status 属性。不过,它将 return 我的 $request->all() 中的所有属性。这些已经过验证并来自表格。

如何 return 我的完整 $server 模型包括 status 的默认值?我被迫启动另一个查询以重新获取我刚刚创建的模型,这样我也可以将 status 属性 包含在 MySQL 默认值中?

如果您return将其设为JSON,您可以将status添加到protected $appends = ["status"];

class Server extends Model {
   protected $appends = ["status"];
   ...
}

这样,即使您没有在 Server::create() 方法中设置 status,它 应该 仍然在您的 [=13= 中可见] 响应为 server.status。另外,也许将 return 调整为

return response()->json(["server" => $server], 200); // or whatever HTTP code you need.

因为 $appends 只适用于 accessors,也许使用 $request->merge() 到 "fill in the gaps" 来获取你想要 return 在你的 JSON 中编辑的数据回应:

$request->merge([
  "status" => "active", // Or whatever the default is from the database
  ...
]);

由于响应是 returning $request->all() 中的所有内容,因此将其与 MySQL 中的默认值合并。注意:目前是硬编码的,如果 migration/schema 更改,或通过 SQL 命令获取默认值,则需要更新。

它不会在插入后执行选择,因此您不会获得数据库必须自行设置的任何值。您可以刷新模型实例(使其变为 select 该行):

$model->refresh();