Здравствуйте!
Этот вопрос скорее идет как продолжение/дополнение моего предыдущего вопроса,
вот этого, хотя его можно рассматривать и как отдельный вопрос.
Задача.
Реализовать прием комментариев от посетителей сайта. Комментарии разделяются по категориям. Посетитель может оставить комментарий в нескольких категориях одновременно. Администратор сайта может добавлять, редактировать и удалять категории.
Схема бд:
При удалении админом одной из категорий нужно удалить связанную с ней запись(или записи) из таблицы cat_id. Если комментарий имел только одну категорию, то нужно вместе с записью из таблицы cat_id удалить связанную с ней запись из таблицы comment. Так вот, записи из таблицы cat_id удаляются вместе с категорией, а связанная с ней запись из таблицы comment не удаляется. Не могу понять в чем проблема.
Для всего этого были созданы три класса: Category, Comment и Category_Comment.
Categoryclass Category
{
public function delete($id)
{
$sql = 'DELETE FROM `category` WHERE id = "' . $id . '"';
$result = $this->mysqli->query($sql);
if (!$result) {
die($this->mysqli->error);
} else {
$cat_com = new Category_Comment();
$cat_com->delete($id);
return true;
}
}
}
Comment class Comment
{
public function delete($id)
{
$sql = 'DELETE FROM `comment` WHERE id = "' . $id . '"';
$result = $this->mysqli->query($sql);
if (!$result) {
die($this->mysqli->error);
}
}
}
Category_Commentclass Category_Comment
{
public function findComId($id)
{
$sql = 'SELECT comment_id FROM `category_comment` WHERE category_comment.category_id = ' . $id;
$result = $this->mysqli->query($sql);
if (!$result) die($this->mysqli->error);
return $result->fetch_all(MYSQLI_ASSOC);
}
public function findCatId($id)
{
$sql = 'SELECT category_id FROM `category_comment` WHERE category_comment.comment_id = ' . $id;
$result = $this->mysqli->query($sql);
if (!$result) die($this->mysqli->error);
return $result->fetch_all(MYSQLI_ASSOC);
}
public function delete($id)
{
$com_id = $this->findComId($id);
$com = new Comment();
foreach ($com_id as $key => $value) {
$cat_id = $this->findCatId($value['comment_id']);
if (count($cat_id) == 1 and $cat_id[0]['category_id'] == $id) {
$com->delete($value['comment_id']);
$this->delete_cat_com($id);
} elseif(count($cat_id) > 1) {
$this->delete_cat_com($id);
}
}
}
private function delete_cat_com($id)
{
$sql = 'DELETE FROM `category_comment` WHERE category_id = "' . $id . '"';
$result = $this->mysqli->query($sql);
if (!$result) {
die($this->mysqli->error);
}
}
}
В методе delete() класса Category вызывается метод delete() класса Category_Comment. В методе delete() класса Category_Comment происходит поиск всех комментариев связанных с удаляемой категорией. Дальше в этом методе подсчитывается количество категорий у каждого комментария, если у комментария только одна категория, удаляемая, то удаляется и сам коммент из таблицы comment и запись из таблицы cat_id. Если категорий больше чем одна, то удаляется только запись. Так вот, из таблицы comment что то ничего не удаляется или удаляется только первый коммент из нескольких. Может кто подскажет в чем причина.