Comment appeler une requête de base de données de modèles dans une fonction javascript dans une vue?
-
12-10-2019 - |
Question
Sur ma boîte de réception de l'utilisateur de mon système de messagerie de l'utilisateur Je construis une fonction où un utilisateur peut faire un message e-mail un message favori.
J'ai créé 2 méthodes dans mon modèle de messages. Une mise à jour du 0 dans le tableau « messages », colonne « favori » à 1 ce qui voudrait dire que l'utilisateur souhaite que le message soit un favori. Aussi l'image que l'utilisateur clique sur le message pour faire un tour favori de gris à la couleur.
Alors je fais ce même processus si un utilisateur veut faire le message pas un favori. L'une est mise à jour a 0 et les spires de l'image en grisé à nouveau.
Voici mon jquery / javascript qui fait fondamentalement quelque chose si la case est cochée (l'image est en couleur) et autre chose si la boîte n'est pas cochée (l'image grisés).
// 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
}
}
});
Ce que je suis en train de comprendre est la meilleure façon de mes 2 requêtes appelé db dans mon modèle:
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'");
}
Quelle serait la meilleure façon de le faire? Appeler un modèle directement dans une vue est une mauvaise pratique ne l'est pas?
Alors, comment pourrais-je obtenir ce que je voudrais réaliser?
pourrait un acte de contrôleur comme intermédiaire?
Si oui, comment pourrais-je appeler même un contrôleur dans une fonction javascript?
J'apprécie toujours les conseils donnés ici. Merci à l'avance
La solution
Dans le jQuery, vous pouvez utiliser une requête get Ajax à un contrôleur CodeIgniter. Supposons que votre contrôleur est appelé les utilisateurs, et votre fonction est appelée update_favorites. L'appel jQuery pourrait ressembler à ceci:
$.get('http://mysite.com/users/update_favorites/user_id/message_id');
Votre contrôleur serait alors trouver les arguments d'URL pour user_id et message_id, et chargez votre modèle avec ces arguments. Le modèle apporterait des changements à la base de données.
Bonne chance!
Autres conseils
en plus de la méthode .get $ Summer, vous pouvez utiliser la méthode .post () $ jQuery de la même façon. J'aime utiliser poster mieux parce que Codeigniter a été écrit pour favoriser les demandes de poste sur recevoir des demandes.