php - 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();
});
解决方案
错误消息告诉您确切的问题是什么。您正在尝试插入类别记录,但您的表单不包含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');
});
推荐阅读
- reactjs - 用 AND 逻辑反应原生三元条件
- ruby-on-rails - 测试所有 rspec 测试是否已通过 ruby 文件
- sql-server - 添加额外的总工资行
- php - 如何在codeiginter中删除之前使用confirm
- vue.js - 如果我在下面的文本框中键入,则 Vue 组件选择重置
- iis - 端口 443 忽略 IgnoreCertificateValidation = true?
- asp.net-mvc - ASpNetCore 2.1 MVC 在 JSON 结果上重定向
- html - 在 html 标签中显示小 svg 图片
- reactjs - 如果你可以使用 async/await 来让 React 的 setState 同步呢?
- java - PersistentConnection:pc_0 - 身份验证失败:permission_denied(访问被拒绝。)将 Spring Boot 连接到 Firebase