Php 保存登录用户';当我有$request->;全部()
我想从数据库中的表单保存新帖子,我在$request中有标题和正文,并想在帖子中保存登录用户的id。我如何在模型或验证中处理它Php 保存登录用户';当我有$request->;全部(),php,laravel,Php,Laravel,我想从数据库中的表单保存新帖子,我在$request中有标题和正文,并想在帖子中保存登录用户的id。我如何在模型或验证中处理它 Validator::make($request->all(), [ 'title' => ['required'], 'body' => ['required'], ])->validate(); Post::create($request->all()); 我可以将其保存为以下内
Validator::make($request->all(), [
'title' => ['required'],
'body' => ['required'],
])->validate();
Post::create($request->all());
我可以将其保存为以下内容:
$post = new Flight;
$post->title = $request->title;
$post->body = $request->body;
$post->user_id = $request->user()->id;
$post->save();
但我想要更好的方式
- 用户id在数据库中不可为空
使用身份验证代码>
比你能用的还多
$post->user_id=Auth::id()代码>
您可以同时使用Auth::user()->id
或Auth::id()
。谢谢这是我经常使用的示例代码
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Response;
...
public function store(Request $request)
{
// take only fields that have been validated.
// instead of inserting all the request body
$validated = $request->validate([
'title' => 'required',
'body' => 'required'
]);
// use FormRequest if want seperate validation and its much cleaner
// something like this
// store(StorePostRequest $request)
// $validated = $request->validated();
// instead of declaring use Auth
// u can just use $request->user();
$post = $request->user()->post()->create($validated);
// or if you dont have the relation inside the user model
$post = Post::create(['user_id' => auth()->id()] + $validated);
return new JsonResponse($post, Response::HTTP_CREATED);
}
您可以使用表单请求验证从控制器中提取验证登录名(请参阅)
我建议使用$request->validated()
此外,您还可以使用auth()->id()
helper方法登录用户id
因此,控制器功能可以如下所示:
Post::create(array_merge($request->validated(), ['user_id' => auth()->id()]));
问题到底是什么?无论您做了什么,看起来都是正确的。$request->user()->id
这将为您提供经过身份验证的登录用户,那么这里的问题是什么?我想在模型或验证中处理此问题,并在控制器的代码中使用Post::create($request->all());。实际上,与Laravel自己处理的时间戳或字段的默认值相同,我想处理这个问题。需要了解的是,$request->all()
为您提供了带有名称的表单输入数组。如果您的表单中没有任何关于用户id
的输入,您将无法在$request
中获得它。要么定义输入,要么继续做你已经做过的事情。@Muddassir所展示的方法也是获取经过身份验证的用户id的好方法。是的,我知道表单和请求,我想自动处理。例如,如果添加受保护的$attributes=['user_id'=>1,],1号总是为用户id保存,现在我想要用户id而不是1号$post=post::create(['user\u id'=>auth()->id()]+$validated);这个对我不起作用。但是基于关系的那个还可以,谢谢