0

これがcodeigniterMVCでの私の問題です。

私が3つのモデルを持っていると仮定します:(ユーザー、電子メール、支払い)。誰かが何らかの方法で支払いをした場合、コントローラーは支払い方法モデルを呼び出します。そのメソッドは他のコントローラーからも呼び出すことができます。

そのメソッドは、データベースの挿入と更新を行い、最後にユーザーにメールを送信したいのですが、すでにユーザーIDがありますが、ユーザー名、emailが必要です。これは、usersテーブルから取得してからメールを送信する必要があります。

支払いモデルがユーザーテーブルにアクセスできるのが好きではありません。ユーザーモデルから情報を取得し、メールモデルを使用してメールを送信したいと思います。

通常、私はそれらをコントローラーから呼び出します。つまり、最初に支払いモデルを呼び出して結果を取得し、ユーザーモデルからユーザー情報を取得してから、すべてコントローラーで電子メールモデルを使用します。

しかし、一部のコントローラーでそのモデルのメソッドを実行する必要があるため、これらの行を繰り返す必要があり、それは私のポイントでは正しい側面ではありません。

質問:モデル内で他のモデルを呼び出すか、モデル内で他のモデルテーブルを使用する必要があります(このオプションでは、そのモデルを再利用する場合、他のテーブルが変更された場合は変更する必要があります)、または他の方法はありますか?

主な問題は、それが単なる状況の例であるということではありません。また、それらを実行してコントローラーから呼び出す関数も定義しましたが、それも正しくありません。

4

2 に答える 2

1

すべてをライブラリに入れます。

したがって、コントローラーは「支払い」のためにライブラリを呼び出し、いくつかの詳細を渡します。次に、ライブラリは上記で説明したすべての機能を実行します。つまり、支払いモデルの呼び出し、電子メールの送信などです。

codeigniterライブラリの詳細についてはこちらをご覧ください

于 2012-06-20T11:32:06.403 に答える
1

これが素晴らしい解決策です。アプリケーション/コアでMy_model.phpを定義します。

Class My_model extends CI_Model{

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

    function get($where , $table){
        $query = $this->db->get_where($table, $where);
        return $query->result();
    }
}

ここで、モデルはCI_ModelではなくMy_modelを拡張する必要があります。そして今、あなたはそれをこのように呼ぶことができます。コントローラに電子メールモデルをロードし、ユーザーモデルにアクセスしたいとします。

 $where = array('user_id', $id); 
 $table = 'user';
 $this->email->get($table, $where);

詳細については、この本を読んで
くださいhttp://codeigniter.com/forums/viewthread/211821/

于 2012-06-20T11:49:15.943 に答える