我有postqs和users表。 user_id是postqs表中的外键。我有一个表格,并在我提交表格后正确保存在数据库中的所有数据。但它没有指向索引页面显示此错误:
SQLSTATE [HY000]:常规错误:1364字段'user_id'没有 默认值(SQL:插入
Postqs
(question
,description
,solution
,image
,tags
,updated_at
,created_at
)值(hh, bb,bb,images .bmp.jpg,bb,2017-09-20 08:14:32,2017-09-20 8点14分32秒))
我如何解决?
存储控制器功能:
public function store(Request $request)
{
$this->validate($request, [
'question' => 'required',
'description' => 'required',
'tags' => 'required',
]);
$user = auth()->user();
$user->postqs()->create($request->all() );
$input = $request->all();
$tags = explode(",", $request->tags);
$postqs = Postqs::create($input);
$postqs->tag($tags);
return redirect()->route('postqs.index')
->with('success','Your question created successfully');
索引控制器功能:
$postqs=Postqs::whereHas('user')->get();
return view('postqs.index',compact('postqs','users'));
postqs模特:
protected $fillable =
['question','description','solution','image','tags','user_id'];
public function user(){
return $this->belongsTo("App\User"); }
用户模型:
public function postqs(){
return $this->hasMany("App\Postqs");
}
答案 0 :(得分:3)
表中的字段user_id不可为空,并且您尝试在没有user_id的情况下保存帖子,或者可能未通过请求传递user_id。 试试这个:
$this->validate($request, [
'question' => 'required',
'description' => 'required',
'tags' => 'required',
]);
$user = auth()->user();
$data = $request->all();
$data['user_id']=$user->id;
$user->postqs()->create($data);
$tags = explode(",", $request->tags);
$postqs = Postqs::create($data);
//$postqs->tag($tags);
$postqs->tag()->save($tags);
return redirect()->route('postqs.index')
->with('success','Your question created successfully');
答案 1 :(得分:1)
你没有发布你的表的模式,但是从错误看来你有一个字段user_id
被设置为非空且没有默认值 - 这意味着每个插入查询都必须提供它值。
解决方案 - 为列提供默认值,或在查询中传递
答案 2 :(得分:1)
当我遇到此错误时,这是@Matius的答案中的解决方案
$user = auth()->user();
$data = $request->all();
$data['user_id']=$user->id;
答案 3 :(得分:0)
您是否在数据库中添加了用户?请添加用户,然后您必须将user_id
添加到$fillable
。
答案 4 :(得分:0)
就我而言,在更新Mysql之后,数据库的索引消失了。我收到了我们正在谈论的相同错误消息。
我不得不重新创建索引,并使每个表上的id列成为主键,并自动递增。
之后...一切正常。