如何在create form中添加user_id

时间:2018-05-03 06:57:33

标签: laravel controller eloquent

我正在研究一种雄辩的关系,我想为特定用户创建一个帖子。我想在创建表单中添加User_Id

以下是我的代码段:

@extends('layouts.app')
@section('content')
<div class="container">
    <form method="post" action="{{route('articles.store')}}">
    @csrf
        <input type="hidden" name="user_id" value="{{ Auth::user()->id }}">
        <div class="form-group">
            <label>Başlık</label>
            <input class="form-control" name="title" placeholder="Başlık">
        </div>
        @if($errors->has('title'))
            <span class="text-danger">
                {{$errors->first('title')}}
            </span>
        @endif
        <div class="form-group">
            <label>Post İçeriği</label>
            <textarea class="form-control" name="body" placeholder="İçerik" rows="3"></textarea>
        </div>
        @if($errors->has('body'))
            <span class="text-danger">
                {{$errors->first('body')}}
            </span>
        @endif
        <button  type="submit" class="btn btn-primary">Kaydet</button>
     </form>
    </div>
@endsection

我的文章模型是这样的;

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

 class Article extends Model
{
   protected $fillable=[
  'title','body','user_id'
];

 public function user()
 {
    return $this->belongsTo('App\User');
 }

}

这是我的控制者;

public function store(ArticleRequest $request)
{
    Auth::user();
    $article =  new Article();
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');

    $article->save();

    return redirect()->route('articles.index');
}

但最后,我收到了以下错误:

 SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a 
   default value (SQL: insert into `articles` (`title`, `body`, `updated_at`, 
  `created_at`) values (Merhaba, Bu post id değeri 1 olan user tarafından 
   yazıldı., 2018-05-03 06:55:45, 2018-05-03 06:55:45))

4 个答案:

答案 0 :(得分:1)

public function store(ArticleRequest $request)
{
    Auth::user();
    $article =  new Article();
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');
  

$ article - &gt; user_id = $ request-&gt; get('user_id'); //添加此行

    $article->save();

    return redirect()->route('articles.index');
}

答案 1 :(得分:1)

您可以在存储过程中从Auth用户获取当前登录的用户ID。

public function store(ArticleRequest $request)
{
    Auth::user();
    $article =  new Article();
    $article -> user_id=Auth::user()->id;
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');

    $article->save();

    return redirect()->route('articles.index');
}

答案 2 :(得分:1)

您可以像其他人的答案一样发送用户ID和其他人发布数据。但是既然你研究了雄辩的关系如何运作,那么为什么不用它来保存文章模型。

User模型中创建文章关系:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{  
   .........
   .........

   // Since user can have many articles, then i assumed you need
   // hasMany relationship here, otherwise please change accordingly.
   public function articles()
   {
     return $this->hasMany(Article::class);
   }

} 

在您的控制器中(它会自动将外键添加到Article型号):

public function store(ArticleRequest $request)
{

  $user = Auth::user();

  $user->articles()->create($request->only(
     'title',
     'body'
  ));

  return redirect()->route('articles.index');
}

最后,从表单中删除user_id输入字段(不再需要,因为文章将通过经过身份验证的User模型的关系保存):

<!-- remove this -->
<input type="hidden" name="user_id" value="{{ Auth::user()->id }}"> 

答案 3 :(得分:0)

您正在接收用户

$user = Auth::user();

使用此ID

$article -> user_id = $user->id;

public function store(ArticleRequest $request)
{
    $user = Auth::user();
    $article =  new Article();
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');
    $article -> user_id = $user->id;


    $article->save();

    return redirect()->route('articles.index');
}

或者

否则您可以从表单中获取post_ request中的user_id(您可以在表单中使用隐藏字段for user_id)并将其传递给

$article -> user_id=$request->get('user_id');