Php 保存登录用户';当我有$request->;全部()

Php 保存登录用户';当我有$request->;全部(),php,laravel,Php,Laravel,我想从数据库中的表单保存新帖子,我在$request中有标题和正文,并想在帖子中保存登录用户的id。我如何在模型或验证中处理它 Validator::make($request->all(), [ 'title' => ['required'], 'body' => ['required'], ])->validate(); Post::create($request->all()); 我可以将其保存为以下内

我想从数据库中的表单保存新帖子,我在$request中有标题和正文,并想在帖子中保存登录用户的id。我如何在模型或验证中处理它

    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);这个对我不起作用。但是基于关系的那个还可以,谢谢