Codeigniter Удалить запрос не удаляет строку - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь удалить строку из базы данных.После удаления отображаемая таблица должна обновиться и отобразить текущую базу данных (без удаленной строки).

Контроллер

public function delete()
    {
        $this->load->database();
        $this->load->model('userdetailModel');
        $id=$this->input->get('user_id');
        $this->userdetailModel->deleteOne($id);

        $data['results'] = $this->userdetailModel->viewAll();
        $this->load->view('userView', $data);

    }

просмотр

<?php 
        foreach($results as $res): ?>

        <tbody>
            <tr>
                <td><center><b><?php echo $res->user_id; ?></center></b></td>
                <td><center><?php echo $res->first_name; ?></center></td>
                <td><center><?php echo $res->last_name; ?></center></td>
                <td><center><?php echo $res->gender; ?></center></td>
                <td><center><a href=" <?= site_url('userController/view')?> "> View </a></center></td>
                <td><center><a href=" <?= site_url('userController/edit')?> "> Edit </a></center></td>
                <td><center><a href=" <?= site_url('userController/delete?id='.$res->user_id)?> "> Delete </a></center></td>

            </tr>

        </tbody>

    <?php endforeach; ?>
    </table>
    </center>
    } ?>

user_id - это имя поля из базы данных.Я следовал за некоторым исходным кодом, но я не могу понять это правильно.Пожалуйста, объясните мне, чего мне не хватает в этих блоках кода.

Модель

function viewAll() {

        $this->db->select('user_id, first_name, last_name, gender');
        $this->db->from('user_details');
        return $this->db->get()->result();
    }

function deleteOne($id)
    {
    $this->db->select('*');
    $this->db->from('user_details');
    $this->db->where('user_id', $id);
    $this->db->delete('user_details');

    }

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Сначала вам нужно исправить ссылку «удалить», где у вас есть

<?= site_url('userController/delete?id='.$res->user_id)?>

в представлении, а затем в контроллере вы запрашиваете user_id

$this->input->get('user_id');

Вы видите разницу?Вы задаете элемент запроса id=, но запрашиваете (получаете) элемент запроса user_id.Поэтому вам нужно изменить код, чтобы они совпадали.Вероятно, поэтому ничего не удалялось.Вы не получили значение идентификатора.

Вы можете просто передать id в URI следующим образом:

<?= site_url('userController/delete/'.$res->user_id)?>

И тогда функция контроллера изменится на * 1016.*

public function delete($id)
{
    $this->load->database();
    $this->load->model('userdetailModel');
    $this->userdetailModel->deleteOne($id);

    $data['results'] = $this->userdetailModel->viewAll();
    $this->load->view('userView', $data);
}

Обратите внимание, что $id теперь является аргументом функции и может быть более легко использован.

В функции deleteOne модели вы перепутали некоторые задачи.Функции select и from не используются при удалении из таблицы.

Рекомендуется, чтобы функции модели возвращали что-то, чтобы контроллер знал, все ли работает, или нет.

function deleteOne($id)
{
    if(empty($id))
    {
        return false;  //oops, no data for 'where' to use
    }

    $result = $this->db
        ->where('user_id', $id)
        ->delete('user_details');

    return $result !== false;
}

Обратите внимание, что мы проверяем элемент входящих данных $id.Нет смысла выполнять запрос, если нет данных, которые where() может использовать.Если $id равно пусто , вернуть false.

Функция delete() вернет либо объект (типа CI_DB_query_builder), либо логическое значение FALSE.Таким образом, последняя строка кода выше будет иметь логическое значение, либо ИСТИНА, если $result не ложно, либо ЛОЖЬ, если это так.

Протестировав возвращаемое значение модели, вы можете отправить сообщение вашему представлению, если есть проблема, или если удаление прошло успешно - что вы считаете лучшим.Я оставлю использование модели возврата в контроллере для вас.Надеюсь, это поможет.

0 голосов
/ 28 ноября 2018

Попробуйте этот запрос в модели:

function deleteOne($id){
return $this->db->where('user_id',$id)->delete('table_name');
}
0 голосов
/ 27 ноября 2018

Вы можете попробовать:

 $this->userdetailModel->delete($id);

или:

$this->db->delete('userdetailModel', array('user_id' => $id)); 

или:

function deleteOne($id)
{
    $this->db->where('user_id', $id);
    $this->db->delete('user_details');
}

вместо:

$this->userdetailModel->deleteOne($id);

экспликация:

построитель запросов воспламенителя кода имеет встроенный метод удаления.Вы можете позвонить из вашей модели.нет необходимости иметь функцию "deletoOne".

И нет необходимости выбирать ('*') из ('X') перед удалением в SQL

источник:

https://www.codeigniter.com/userguide3/database/query_builder.html#deleting-data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...