ビューでJavaScript関数でモデルデータベースクエリを呼び出す方法は?
-
12-10-2019 - |
質問
ユーザーメッセージングシステムからのユーザーの受信ボックスで、ユーザーが電子メールメッセージをお気に入りのメッセージにすることができる機能を構築しています。
メッセージモデルに2つのメソッドを作成しました。 1つは「メッセージ」テーブルの0を更新します。「お気に入り」列を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 dBクエリを呼ぶ最良の方法です:
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関数のコントローラーを呼び出すことができますか?
ここで与えられたアドバイスにいつも感謝しています。前もって感謝します
解決
jQueryでは、codeigniterコントローラーにajax get requestを使用します。コントローラーがユーザーと呼ばれ、機能がupdate_favoritesと呼ばれるとします。 jQueryコールは次のようになるかもしれません:
$.get('http://mysite.com/users/update_favorites/user_id/message_id');
コントローラーは、user_idとmessage_idのURL引数を見つけ、モデルをそれらの引数でロードします。モデルはデータベースを変更します。
幸運を!
他のヒント
夏の$ .getメソッドに加えて、jqueryの$ .post()メソッドをほぼ同じ方法で使用できます。 Codeigniterは、Get Requestsよりも投稿リクエストを支持するために書かれたため、Postを使用するのが好きです。