首页 > 解决方案 > SQLSTATE [HY000]:一般错误:1364 字段 'mov_id' 没有默认值

问题描述

有一个与电影类别这两个表相关的问题

类别属于电影,这意味着我可以为电影设置多种类别。

所以在类别模型中,我把这段代码

public function movie(){
    return $this->belongsTo('App\Movie', 'mov_id');
}

我想设置 categories.mov_id = movie.id

在控制器部分,验证很好,当我输入空白时会显示错误消息。但问题是无法保存到数据库并显示mov_id 没有默认值

public function store(Request $request)
{
    $rules = array(
        'cat_title' => 'required'
    );
    $validator = Validator::make(Input::all(), $rules);

    if ($validator->fails()) {
        return Redirect::to('category/create')
            ->withErrors($validator);
    } else {
        $movie = new Category();
        $movie->cat_title = Input::get('cat_title');
        $movie->save();
        Session::flash('message', 'Successfully created!');
        return Redirect::to('category');
    }
}

最后,这是视图文件

                   <div class="table-container">
                        <form method="POST" action="{{ route('category.store') }}"  role="form">
                            {{ csrf_field() }}
                            <div class="row">
                                <div class="col-xs-12 col-sm-12 col-md-12">
                                    <div class="form-group">
                                        <input type="text" name="cat_title" id="cat_title" class="form-control input-sm" placeholder="分类">
                                    </div>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-xs-12 col-sm-12 col-md-12">
                                    <input type="submit"  value="Save" class="btn btn-success btn-block">
                                    <a href="{{ route('category.index') }}" class="btn btn-info btn-block" >Back</a>
                                </div>

                            </div>
                        </form>
                    </div>

类别架构

        Schema::create('category', function (Blueprint $table) {
        $table->increments('id');
        $table->string('cat_title');
        $table->integer('mov_id');
        $table->timestamps();
    });

错误消息的图像:- 在此处输入图像描述

标签: phplaravel

解决方案


错误消息告诉您确切的问题是什么。您正在尝试插入类别记录,但您的表单不包含mov_id值。您的架构指定它mov_id是一个整数,但没有指定任何默认值,也不能为空。所以如果你不告诉它,Laravel 不知道该做什么mov_id,所以它无法创建记录。

快速修复是更新您的架构以允许空mov_id

$table->integer('mov_id')->nullable();

但我认为你会有更大的问题。一个类别可能根本不应该有电影 ID - 这意味着每个类别最多可以有 1 部电影。

我认为你真正想要的是电影和类别之间的多对多关系。这意味着一部电影可以有多个类别,而一个类别可以分配给多部电影。

Laravel文档很好地描述了它并包含了一个示例。你需要更新你的 Laravel 关系:

// Category model
public function movie() {
    return $this->belongsToMany('App\Movie');
}

// Movie model
public function category() {
    return $this->belongsToMany('App\Category');
}

和你的架构:

Schema::create('movies', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    // ... etc
});

Schema::create('categories', function (Blueprint $table) {
    $table->increments('id');
    $table->string('cat_title');
    // ... etc
});

Schema::create('category_movie', function (Blueprint $table) {
    $table->integer('category_id');
    $table->integer('movie_id');
});

推荐阅读