如何为模型的质量分配返回默认的列值?

时间:2018-08-14 18:34:37

标签: mysql laravel laravel-5.6

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

/** @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属性?

2 个答案:

答案 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命令获取默认值。