Как вызвать запрос базы данных моделей в функции JavaScript в представлении? - PullRequest
0 голосов
/ 18 января 2011

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

Я создал 2 метода в своей модели сообщений.Каждый обновляет 0 в таблице «messages», столбце «favourite» до 1, что означает, что пользователь хочет, чтобы сообщение было избранным.Кроме того, изображение, по которому пользователь нажимает, чтобы сделать сообщение избранным, меняется с серого на цветное.

Затем я делаю эту же процедуру еще раз, если пользователь хочет сделать сообщение не избранным.1 обновляется до 0, и изображение снова становится серым.

Ниже приведен мой jquery / javascript, который в основном делает что-то, если флажок установлен (цветное изображение), и что-то еще, если флажок не установлен.не проверено (изображение затенено).

// favourite check box
    $('input.favourite:checkbox').simpleImageCheck({
  image: '<?php echo base_url()?>images/messages/check.png',
  imageChecked: '<?php echo base_url()?>images/messages/unchecked.png',
  afterCheck: function(isChecked) {
    if (isChecked) {
  //query to db from php to update favourite number to 1
    }
    else (!isChecked)
        {
            //query to db from php to update favourite number to 0
        }
  }
});

То, что я пытаюсь выяснить, это лучший способ назвать мои запросы в 2 дБ в моей модели:

public function favourite_checked($message_id)
{
    $username = $this->session->userdata('username');
    return $this->db->query("UPDATE messages SET favourite = 1 WHERE id = $message_id AND to_user = '$username'");    
}

    public function favourite_unchecked($message_id)
{
    $username = $this->session->userdata('username');
    return $this->db->query("UPDATE messages SET favourite = 0 WHERE id = $message_id AND to_user = '$username'");    
}

Что было былучший способ сделать это?Вызывать модель непосредственно в представлении - это плохая практика, не правда ли?

Так как же я могу достичь того, чего хотел бы достичь?

Может ли диспетчер выступать в роли посредника?

Если так, то как бы я даже вызвал контроллер в функции javascript?

Я всегда ценю совет, данный здесь.Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 18 января 2011

В jQuery вы будете использовать запрос получения Ajax к контроллеру CodeIgniter.Скажем, ваш контроллер называется users, а ваша функция называется update_favor.Вызов jQuery может выглядеть так:

$.get('http://mysite.com/users/update_favorites/user_id/message_id');

Затем ваш контроллер найдет аргументы URL для user_id и message_id и загрузит вашу модель с этими аргументами.Модель внесет изменения в базу данных.

Удачи!

1 голос
/ 18 января 2011

в дополнение к методу $ .get Саммерса, вы можете использовать метод $ .post () jQuery почти таким же образом.Мне нравится использовать post лучше, потому что Codeigniter был написан, чтобы отдавать предпочтение почтовым запросам по сравнению с запросами на получение.

...