0

ユーザーが自分のアカウントにいて、[アカウントの削除]をクリックすると、ユーザーに残されたメッセージとともにユーザーが削除され、他のユーザーには友達として表示されなくなります。これらのうち2つは機能していますが、ログインすると別のユーザーにメッセージが表示されます。ユーザーが友達からメッセージを削除するために使用できる関数が既に作成されているので、これを新しい関数に実装してみました。メッセージを削除しますが、特定の友達からです。これが元のdeleteMsgで、すべてのフィールド(message_id、from、to、message)が削除されるため、メッセージはメッセージデータベースから削除されます。この関数は私のメッセージモデルに表示されます:

function deleteMsg($message_id)
 {

$this->db->where(array('message_id' => $message_id));
$this->db->delete('messages');

 }

これが私が実装しようとしている関数です。削除アカウントが呼び出されると、この削除されたユーザーが他のユーザーのホームページに残したすべてのメッセージが削除されます。それは私のモデルにも現れます:

  function deleteAccountMsg($message_id, $from)
  {
$delAcctMsg = $this->db->select('*')->from('messages')->where('message_id', $message_id)->where('from', $from);
$delete = $this->db->delete('messages', $delAcctMsg);

    }

最後に、これが私のコントローラーのDeleteUserAccount関数で、ユーザーに関連付けられているすべてのものを取得して削除することになっています。

 function Deleteuseraccount()
 {
    parent::__construct();

    $this->load->model("membership");
    $this->load->model("friends");
    $this->load->model("messages");


    $username = $this->session->userdata('username');
    $this->membership->deleteUser($username);
    $this->friends->deleteMemberFriend($username, $friendname);
    $this->messages-> deleteAccountMsg($message_id, $from);// this is the function I'm calling that isn't deleting the associate messages from the deleted user
    $this->session->sess_destroy();
    redirect('start');
 } 
}
4

2 に答える 2

0

一度に 1 つのメッセージのみを (選択して) 削除しています。メッセージ ID の制限を削除する必要はありません

$delAcctMsg = $this->db->select('*')->from('messages')->where('from', $from);
$delete = $this->db->delete('messages', $delAcctMsg);

いくつかのメモ

1) 疑似SQLを先に書く

やりたいことをPHPで綴ることで解決できます

SELECT *
FROM messages
WHERE from=$from

これにより、SQL モデルに必要なチェーンが得られます。

2) SELECT *message_id のみを選択する必要があるのはなぜですか?

SELECT3)削除できるのに、なぜそんなことをするのですか? ネットワーク トラフィック、処理、および mySQL 呼び出しを節約します。

$delete = $this->db->delete('messages')->where('from', $from);

4) 前の関数を適応させたい場合は、ビットに分割できます。何かのようなもの

// (Untested - try it first on test data)
$this->db->where('from', $from);
if ($message_id) {
    $this->db->where('message_id', $message_id);
}
$this->db->delete('messages');
于 2012-12-07T01:02:23.073 に答える
0

$this->db->select('*')->from('messages')->where('from', $username)->or_where('to', $username);

これは実際にこの問題を解決しました

于 2012-12-09T13:53:20.243 に答える