我在做个人博客当中遇到了一个经常遇到的问题,就是删除栏目表数据,文章表数据和评论表数据对应删除,以下是自己解决方法。
先说下思路:
1.开始先找出删除对应的删除栏目数据
// 获取删除id
$id = input('get.id');
// 栏目数据
$cateInfo = model('Cate')->where('id',$id)->find();
2.找出栏目对应的文章数据
// 文章数据
$articleInfo = model('Article')->where('cate_id',$id)->select();
3 通过遍历文章数据,找出与栏目数据相等,执行删除语句
foreach ($articleInfo as $key => $value) {
if ($cateInfo->id == $value->cate_id) {
// 栏目与文章拥有共同数据,执行删除文章
$artRes = $value->delete();
if (!$artRes) {
return '删除文章失败';
}
}
}
4.找出文章表对应的评论数据,并且遍历评论数据,找出与文章相同的数据,执行删除,过程与上面相似。
// 评论数据
$comInfo = model('Comment')->where('article_id',$value->id)->select();
// 遍历评论数据,如果评论在删除文章中,一起删除
foreach ($comInfo as $key => $c) {
// $c 是评论数据
if ($c->article_id == $value->id) {
// 执行删除评论
$comRes = $c->delete();
if (!$comRes) {
return '删除评论失败';
}
}
}
5.执行删除栏目
/ 删除栏目
$cateDel = $cateInfo->delete();
if ($cateDel) {
return $this->success('删除栏目成功','admin/Cate/cateList');
}
else {
return $this->error($cateDel);
}
全部代码:
// 获取删除id
$id = input('get.id');
// 栏目数据
$cateInfo = model('Cate')->where('id',$id)->find();
// 文章数据
$articleInfo = model('Article')->where('cate_id',$id)->select();
// 遍历文章,如果文章有与删除栏目数据,执行删除
foreach ($articleInfo as $key => $value) {
if ($cateInfo->id == $value->cate_id) {
// 栏目与文章拥有共同数据,执行删除文章
$artRes = $value->delete();
if (!$artRes) {
return '删除文章失败';
}
// 评论数据
$comInfo = model('Comment')->where('article_id',$value->id)->select();
// 遍历评论数据,如果评论在删除文章中,一起删除
foreach ($comInfo as $key => $c) {
// $c 是评论数据
if ($c->article_id == $value->id) {
// 执行删除评论
$comRes = $c->delete();
if (!$comRes) {
return '删除评论失败';
}
}
}
}
}
总结一下:代码步骤不难,就是过于冗杂,可以自己找出更简洁的方法!