我有两个表用户和帖子。 这是我的用户表迁移文件:
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->string('password_temp',60);
$table->integer('active');
$table->string('code',60);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
这是我的帖子表迁移文件
public function up()
{
Schema::create('posts', function(Blueprint $table){
$table->increments('id');
$table->string('title');
$table->text('body');
$table->integer('user_id')->unsigned();
$table->string('slug');
$table->timestamps();
});
Schema::table('posts',function(Blueprint $table){
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade')
->onUpdate('cascade');
});
}
AdminPostsController扩展Controller { 公共功能商店(请求$请求) {
$validator = Validator::make($request->all(),Post::$rules);
if($validator->passes()){
$post = new Post();
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->user_id = $request->get('id');
$post->slug = Slug::generateSlug($request->get('title'));
$post->save();
return Redirect::route('admin.posts.index');
}
else{
return Redirect::route('admin.posts.create')->withErrors($validator)->withInput();
}
}
}
每次我插入新帖子时,我总会看到以下错误“QueryException in Connection.php line 614:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
博客.
帖子, CONSTRAINT
posts_user_id_foreign FOREIGN KEY (
user_id ) REFERENCES
个用户{{ 1}} ID为(
”
我想知道我做错了什么。
答案 0 :(得分:8)
此代码创建一个约束,以便您的帖子必须由有效的用户ID引用。 user_id
字段必须包含users表id字段中的现有密钥。
$table->foreign('user_id')
->references('id')
->on('users')
尝试在保存新帖子之前关联用户。
$post = new Post();
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->user()->associate($user);
$post->save();
假设您在$user
var上加载了有效的用户模型,并且您已在模型上设置了用户和帖子之间的关系。