错误:
SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `posts` (`title`, `body`, `updated_at`, `created_at`) values (fdsfsd, dfds, 2020-06-09 16:32:53, 2020-06-09 16:32:53))
这是PostsController
public function store(Request $request)
{
$this->validate($request,[
'title'=>'required',
'body'=>'required'
]);
$post = new Post ;
$post->title = $request->input('title');
$post->body= $request->input('body');
$post->save();
return redirect('/posts')->with('success','Post created');
}
这是我所做的迁移
public function up()
{
Schema::table('posts',function($table){
$table->String('user_name');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('posts',function($table){
$table->dropColumn('user_name');
});
}
}
当我输入以下内容时:php artisan migrate:rollback,商店功能可以完美运行,但是帖子中没有创建它的用户名
并感谢您的进步。
答案 0 :(得分:0)
您的代码中有很多弱点...。
列“ user_name”的位置是“ users”表而不是“ posts”表,因此不应进行迁移....
您必须在存储方法中以及在Post模型中的$ fillable中设置“ user_id”,例如:
class Post extends Model
{
$protected $fillable=['title','body','user_id'];
public function user()
{
return $this->belongsTo(User::class,'user_id');
}
}
然后..在您的控制器中,您必须从当前登录的用户那里获取“ user_id”:
public function store(Request $request)
{
$this->validate($request,[
'title'=>'required',
'body'=>'required'
]);
$post = new Post() ;
$post->title = $request->input('title');
$post->body= $request->input('body');
$post->user_id=$request->user()->id;
$post->save();
return redirect('/posts')->with('success','Post created');
}
您必须确保绑定到此控制器方法的路由应具有身份验证中间件...
现在:如果要使用用户名发帖:
$postWithUserName=Post::where('id',$post_id)->with('user:id,name')->get();
确保在用户表中有一列“名称” ...