每当我尝试删除子表中相关歌曲的艺术家时。 它会返回此错误。
QueryException in Connection.php line 647:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`laravel`.`artist_song`, CONSTRAINT `artist_song_artist_id_foreign` FOREIGN KEY (`artist_id`) REFERENCES `artists` (`id`)) (SQL: delete from `artists` where `id` = 1)
这就是我想要的。保护父表,但我想要的是让最终用户看到这样的消息“你不能删除一个有相关歌曲的艺术家请删除这位艺术家的所有歌曲,首先'。所以我怎么能抓住这个自定义异常?
答案 0 :(得分:0)
我认为您不必依赖数据库异常。当有人选择删除艺术家时,您应该验证艺术家是否有任何歌曲,如果是,则应该重定向并留言。
假设您的Artist
模型关系定义如下:
public function songs()
{
return $this->hasMany(Song::class);
}
在控制器中你可以使用这样的代码:
public function destroy($artistId)
{
$artist = Artist::findOrFail($artistId);
if ($artist->songs()->count()) {
return redirect()->back()->with('message','You cannot delete ...');
}
$artist->delete();
return redirect()->route('artists.index');
}