为何错误:一般错误:1364字段'user_id'没有默认值

时间:2017-09-20 08:25:02

标签: php mysql laravel

我有postqs和users表。 user_id是postqs表中的外键。我有一个表格,并在我提交表格后正确保存在数据库中的所有数据。但它没有指向索引页面显示此错误:

  

SQLSTATE [HY000]:常规错误:1364字段'user_id'没有   默认值(SQL:插入Postqsquestiondescription,   solutionimagetagsupdated_atcreated_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");
    }

5 个答案:

答案 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列成为主键,并自动递增。

之后...一切正常。