Я хочу удалить данные по условию. Если данные доступны в другой таблице как внешний ключ, то не удаляем это - PullRequest
0 голосов
/ 25 октября 2018

У меня есть 3 таблицы, 1 для блоггеров, идентификатор блоггера сохраняется в таблице кампании в качестве внешнего ключа, а также в таблицах категорий в качестве внешнего ключа, который фактически является таблицей соединений.

iхотите, чтобы, когда идентификатор блоггера отсутствовал в таблице compaign, просто удалите его, но когда он находится в таблице compaign, не удаляйте его и вставьте ошибку ..

по моему коду: когда я удаляю blogger и егоданные находятся в таблице compaign, тогда он просто удаляет данные из таблицы категорий (которая является таблицей соединений таблицы blogger)

это моя модель:

public function delete($id){


      if($id != $this->db->query("SELECT blogger_id FROM tbl_campaign_detail WHERE blogger_id = $id"))
    {
         $query=$this->db->query("DELETE FROM tbl_bloggers_cat WHERE blogger_id = $id AND Cat_id >2000");

        $this->db->where('blogger_id', $id);
        $this->db->delete('tbl_bloggers');
        if($this->db->affected_rows() > 0){
        return true;
        }else{
        return false;
        }
    }
    else
    {

    }


}

это мой контроллер:

public function delete($id){
    $result = $this->bm->delete($id);
    if($result){
        $this->session->set_flashdata('success_msg', 'Record deleted successfully');
    }
    else{
        $this->session->set_flashdata('error_msg', 'Fail to delete record');
    }
    redirect(base_url('blogger/index'));
}

просмотреть код:

<?php $id = $blogger->blogger_id;  ?>
                        <a href="<?php echo base_url('blogger/delete/'.$id); ?>" onclick="return confirm('Do you want to delete this record?');">
                            <span class="glyphicon glyphicon-trash"></span>
                        </a>

Я хочу, чтобы при удалении записи блоггера и ее идентификатора в таблице compaign в качестве внешнего ключа не удалялась эта запись, как показано в сообщении об ошибке..

но через этот код: когда я делаю это, он удаляет категорию блоггера из таблицы категорий, где идентификатор блоггера передается как внешний ключ .. (который является таблицей соединений блоггера и другого пользователя).ее столик)

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вместо того, чтобы делать это в PHP, вы можете сделать это напрямую с помощью схемы схемы базы данных.Когда вы определяете свой внешний ключ, просто on delete restrict:

create table campaign (
  campaing_id     serial   not null,
  blogger_id      integer  not null,
  ....
  foreign key (blogger_id) references blogger (blogger_id) on delete restrict
);

Теперь, если вы попытаетесь удалить запись в таблице blogger, но в таблице campaign есть дочерние записи, mysql предотвратитудаление и вернуть ошибку.

0 голосов
/ 25 октября 2018

вам нужно изменить функцию удаления, как это

 function delete($id){
    $result = $this->db->query("SELECT blogger_id FROM tbl_campaign_detail WHERE blogger_id = $id")->row();
    if(!$result){
           $this->db->query("DELETE FROM tbl_bloggers_cat  WHERE blogger_id  = $id AND Cat_id > 2000");
           if($this->db->affected_rows() > 0){
                 return true;
            }
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...