Laravel 模型在创建后不返回具有默认值的属性

gab*_*ans 0 php laravel

在我创建新帖子后的控制器中,我在帖子变量中返回新帖子。出于某种原因,我没有取回具有默认值的属性。我注意到,如果我将值设置为控制器中的某个值,它确实会返回有效负载中的属性。

public function create(Request $request)
    {
        $validatedData = $request->validate(PostValidator::$create);

        $post = new Post();
        $post->postcategory_id = $request->input('postcategoryid');
        $post->user_id = $request->input('authorid');
        $post->thumbnail = $this->uploadFile($request, 'thumbnail', config('app.defaultImage'));
        $post->video = $request->input('video');
        $post->slug = $this->slugify($request->input('title'));
        $post->url = '/publicaciones/'.$this->slugify($request->input('title'));
        $post->title = $request->input('title');
        $post->body = $request->input('body');
        $post->isVisible = false; //IF I DO THIS isVisible is returned in $post variable
        $post->save();

        $post->load(['postcategory','author']);

        return response()->json([
            'post' => $post,
        ]);

    }
Run Code Online (Sandbox Code Playgroud)

zah*_*mon 5

你可以说 Laravel 就是这样工作的。新创建的对象中不存在数据库层中定义的默认值。但是,您可以refresh在返回之前使用刷新对象。然后它将具有缺失值。

$post = new Post();
$post->attribute = $request->attribute;
$post->save();

$post = $post->refresh();
return $post;
Run Code Online (Sandbox Code Playgroud)

或者您可以在模型层中设置默认值

protected $attributes = [
   'isVisible' => false
];
Run Code Online (Sandbox Code Playgroud)

并且在返回新创建的对象时您将拥有默认值。