我正在研究一种雄辩的关系,我想为特定用户创建一个帖子。我想在创建表单中添加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))
答案 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');