2011-01-05 12 views
0

私はCodeIgniterに入り、私のモデルの良いアーキテクチャを理解しようとしています。ブログエントリのCodeIgniterでモデルを使用するには?

  • リストページ:次の簡単な例のためにモデルのどのような種類を作成し、エントリデータの一部を示し、コメント
  • ブログエントリのページの数は:コメント一覧、すべてのエントリのデータを示していますコメントページ
  • (コメントデータの一部で):私はそれが簡単かつ効果的だように、この権利を取得しようとしている

すべてのコメントデータを示しています。私はそれらを必要としないページにあまりにも多くの情報を(DBから)ロードしたくありません。

など。同じエントリモデルで複数のエントリと単一のエントリの両方を処理する必要がありますか?コメントはどのように読み込まれますか?私は、複数のエントリ(リスト)ページのコメントの数だけ必要ですが、1つのエントリページのコメントデータのいくつかが必要です。どうやってこれを扱いますか?

+1

*(公式)* [作成あなたのコントローラで あなたはこのようなものを持つことができます20分でブログ](http://codeigniter.com/tutorials/watch/blog/) – Gordon

答えて

0

はい、article_modelモデルはすべての関連するクエリとロジックを処理する必要がありますが、関連するコメントについては別のモデルを作成します。comments_modelとしましょう。

次に、表示する必要があるデータを見て、モデル内のデータを取得/処理する方法を作成します。

例:ブログエントリのページのためにあなたがarticle_model方法をget_entry必要があります、とコメントモデルでget_article_comments、その後、ブログのリストページのためにあなたがコメントモデルでget_entryesとget_article_number_of_commentsが必要になります....


編集

20のブログエントリをリストするページでは、article_model-> get_entryesを呼び出すことによってすべてのブログエントリをリストする1つのクエリを作成し、1つのエントリだけを表示するには、get_single_entry(または結果を制限するget_entryes)を呼び出すか、 get_entry_by_uri、またはget_entry_by_id ...)。次に、各エントリのコメント数を取得するには、エントリIDを渡すコメントモデルでget_multiple_nr_commentを作成します。クエリは「comments.entry_id IN(1、34、55 ...)」のように、 1つのクエリで複数の電話番号を数える方法はいくつかあります。

これで1ページに2つのクエリが表示されます。

+0

それはあまりにも効率的に聞こえません..もしあなたが "..モデルはすべての関連するクエリとロジックを処理する必要があります。 "それは多くのdbコールを生成し始めます。例えば。 20のブログエントリをリストするページ。私は21データベース呼び出しを行う必要があります。 1つはエントリのリスト用で、もう1つはコメントの数を得るための各エントリ用です。右? – ATT

+0

@ATT:ページが2つのクエリだけになるようにする方法の詳細については、答えを編集しました。 –

+0

あなたはコメントの数を得るために別のクエリを使用せずに各エントリのコメントの数を得るためにSQL結合を使用することができます... – kevtrout

0

あなたは、MY_Modelを作成するには、このようなものでした:あなたは、その後のメソッドを使用することができます

class My_Table_model extends MY_Model { 

    function __construct(){ 
     parent::__construct(); 
     $this->table='my_table'; 
    } 
} 

class MY_Model extends CI_Model { 

    var $table = '';//database table 

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

public function get($id = NULL) { 
     $query = $this->db->get_where($this->table, array('id' => (int)$id), 1, 0); 
     if ($query->num_rows() === 1) { 
      return = $query->result(); 
     } 
     return NULL; 
} 

    function get_one($id=NUNLL){} 

    function update($id=NULL, $data=array()){} 

    function delete($id=NULL){} 

    etc... 

} 

そしてテーブルあたりのモデルにあなたがMY_Modelを拡張することができ、このような何かあなたのモデルのMy_Modelから。あなたが何かを上書きしたい場合は

class Table_Controller extends Front_Controller { 

    function __construct(){ 
     parent::__construct(); 
     $this->load->model('my_table_model'); 
    } 

    function comments(){ 
     $this->my_table_model->get($get_id_somehow); 
    } 

} 

は、あなたのモデルでこのようにそれを行うことができますMy_Modelが伸びる:

function my_method($id=NULL, $data=array()){ 
    return parent::my_method($id, $data); 
} 
関連する問題