向保存在Laravel数据库中的数组添加静态值



在Laravel中,我有一个名为articles的数据库表,以及一个名称为Article对应的模型。比方说,表项目有列id,body,created_by

在ArticleController控制器中,我可以这样保存到DB:

$data = request()->validate(['name'=>'required|min:5|max:10']);
$article = new AppArticle();
$article->name = request('name');
$article->created_by = 1;
$article->save();
return redirect()->back();

我想缩短为:

AppArticle::create(request()->validate(['name'=>'required|min:5:max:10']));
return redirect()->back();

我的问题是,列created_by的值将不会来自POST请求,相反,该值可能来自会话或动态全局变量。

如何在缩短的版本中添加created_by列?

您可以使用Model Observer来侦听创建事件,并从auth或会话分配created_at。

签出https://laravel.com/docs/7.x/eloquent#observershttps://laravel.com/docs/7.x/eloquent#events

存在多种解决方案。首先,作为亚历克斯·何塞的回应,你可以使用观察者。您可以使用观察者或事件(在模型中(。其次,您可以在表列上设置默认值。但为什么呢?你的第一条路很好。可读性更强,可扩展性更强。如果你想成为一名优秀的开发人员,请使用第一种方法。如果你想缩短你的代码,试试这个:

$data = request()->validate(['name'=>'required|min:5|max:10']);
AppArticle::create(array_merge($data,['created_by'=>1]));

最新更新