Php Laravel 5.1尝试删除项目时的QueryException
我正在构建一个东西,允许用户上传他们的图形作品,其他用户可以对项目和其他项目发表评论 现在,当用户想要删除他们自己的项目时,它可以工作,但一旦项目有评论或喜欢,我就会得到以下错误:Php Laravel 5.1尝试删除项目时的QueryException,php,mysql,laravel,Php,Mysql,Laravel,我正在构建一个东西,允许用户上传他们的图形作品,其他用户可以对项目和其他项目发表评论 现在,当用户想要删除他们自己的项目时,它可以工作,但一旦项目有评论或喜欢,我就会得到以下错误: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`scotchbox`.`comments`, CONSTRAINT `comments_on_pr
Integrity constraint violation: 1451
Cannot delete or update a parent row: a foreign key constraint fails
(`scotchbox`.`comments`, CONSTRAINT `comments_on_projects_foreign` FOREIGN KEY (`on_projects`)
REFERENCES `projects` (`id`)) (SQL: delete from `projects`
where `id` = 31 and `user_id` = 32)
我假设这可以通过删除comments表中的注释和likes表中的likes来解决?但是我真的不知道如何用外键解决这个问题
我想我需要一种方法删除评论和喜欢的项目之前,删除项目本身。我的ProjectsController的destroy功能是否可以实现这一点?
这是我删除项目的销毁功能:
public function destroy($id)
{
$input = Request::all();
Project::whereId($id)->whereUserId(Auth::user()->id)->delete();
return redirect('projects/');
}
您尝试删除的用户对项目发表了评论。在删除用户之前删除他的评论。或者您试图删除的项目上有一条注释。通过向我的迁移中添加onDelete('cascade')来修复它,如下所示: 迁移评论: $table->foreign('on_projects')->references('id')->on('projects')->onDelete('cascade') 喜欢迁移: $table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade')
当您有外键时,可以选择删除行为 你有:用户,项目 用户有许多项目 这意味着在项目模式中,您将有类似的内容
Schema::create('projects', function(Blueprint $table){
// table fields
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
});
在这种情况下,如果在父级(用户)上发生删除,您已经建立了一个关系,但没有说“如何行为”,这意味着如果您试图删除该用户,将抛出查询异常以保护您
因此,如果是这种情况,您必须找到父项(用户)的所有子项(项目),并在删除父项之前将其删除
第二种解决方案是添加onDelete()行为:
Schema::create('projects', function(Blueprint $table){
// table fields
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
这意味着,如果您删除父项(用户),它将自动查找所有子项(项目),并为您逐个删除它们
最后,请注意,我使用了父母-子女类比来澄清这种情况,这种类比只适用于一对多关系
当你被数据库专家包围时,请避免使用这种类比,以避免进一步的后果。很抱歉,我不确定我是否理解你的意思。我想我需要一种方法来删除项目的评论等。是的,检查你的外键,你需要删除与项目相关的记录,然后才能删除项目。我对Laravel很陌生,你能帮我吗?是否可以使用ProjectsController中的销毁功能从多个表中删除记录?