0

ビューではなくコントローラーからモデルを呼び出すことになっていることはわかっていますが、これを実行する必要がある状況にあります

ここにあります :

ブログスクリプトがあり、各ユーザーのホームページに、投稿ごとに10件の投稿と5件のコメントを表示したいと思います。

だから私のコントローラーは次のようになります

function get_posts($user_id){

   $blog_model = $this->load->model('bloging');
   $posts      = $blog_model->get_user_posts();
   $this->load->view('blog' , $posts )
}

各投稿には多くのコメントが含まれている可能性があるため、私もコメントを取得する必要があります

だから私の見解では私は持っています

foreach($posts->result() as  $p ){

  echo $p->comment;

 /// getting comments
  $comment_model = $this->load->model('comments');
  $co = $comment_model->get_post_comments($p->id);
  foreach($co as $co )
   echo $co->comment;
  //////


}

これを行うには、ヘルパーまたはライブラリを使用するか、モデルで静的メソッドを使用する必要があるため、これはこのようには機能しません(codeigniterを使用していますが、他のフレームワークでは異なる場合があります)

しかし、私にはどのような選択肢がありますか?

これはコントローラーで実行できます。投稿を取得した後、foreachループを使用して各投稿のコメントを取得し、すべてのコメントを2d配列に配置します($c_array[post_id][it's comments array]

それらを投稿付きのビューに送信し、各投稿のビューでコメントの配列を調べて......。

しかし、それは複雑で冗長で遅い継ぎ目です

投稿クエリにはすでに4つの結合があり、コメントクエリには2つの結合があります。これらの2つに結合すると、7になります。

また、2つのクエリでの選択には異なる制限があります。私はmvcにかなり慣れていません。このような状況での正しいアプローチは何ですか?

4

2 に答える 2

1

通常post、その投稿のコメントをフェッチするためのメソッドがモデルにあります。さらに、私は通常、コメントが投稿に結合されていることを確認する方法があるので、すべての投稿に対してコメントクエリを発行する必要はありません。

于 2012-05-25T15:02:37.400 に答える
1

このために独自の MVC システムを作成したと思うので、これをどのように実装するかわかりません。私は Zend Framework を使用しているので、それを使用してそれを行う方法を説明できます。

読み取り専用アクセスである限り、ビューからモデルにアクセスすることに本質的に問題はありませんが、ビュー スクリプトからできるだけ多くのコードを除外することをお勧めします。この目的のために、あなたの状況では、ビュー ヘルパーを使用します。ZFでは独自のビュー ヘルパーを作成するのは非常に簡単です。この方法を使用したい場合は、これを MVC に適応させることをお任せします。

これは、ビュースクリプトからコメントのリストを取得するために必要なコードを抽象化し、次のようなものに置き換えることができることを意味します:-

echo $this->getComments($messageID);
于 2012-05-25T15:50:27.003 に答える