0

私は CodeIgniter を使用しており、それぞれに 3 つのテーブルとモデルがあります。

  • ユーザー - ユーザーの表
  • 製品 - 製品の表
  • UserProduct - どのユーザーがどの製品を持っているかを示すテーブル (2 つの外部キー列、および日付などの他の列)

私のコードでは、特定のユーザーが持っている製品を示すリストを表示したいと考えています。したがって、userId に一致する UserProduct テーブルで選択を行う UserProduct クラスのメソッドと、各製品について必要なすべてのデータを取り込む結合があります。

これは問題なく機能しますが、密結合の道を進んでいることが心配です。たとえば、商品画像の URL を知りたいとします。これを返すためのメソッドが製品モデルにあり、UserProduct モデルに重複したメソッドは必要ありません。また、UserProduct モデルが他のモデルのメソッドにアクセスしようとすることでカップリングを作成したくありません (これは私がCodeIgniter があなたのことを好きだとは思わないでください)。

この問題は、モデルが親テーブルからのデータを必要とし、それを操作したい場合に、外部キーを持つ DB テーブルにアクセスするすべてのモデルで発生する可能性があります。

洗練された解決策はありますか、それとも外部キーが必然的にモデル内の結合を作成すること、またはモデル間で同様の方法が必要であることを受け入れる必要がありますか?

TIA、フィル。

4

1 に答える 1

0

私の個人的な基準は、常に 1 つのコントローラー + 1 つのモデルを作成することです。

たとえば、site.com/users使用するmodel_users.phpsite.com/products使用しますmodel_products.php

コードをスリムにしてメソッドを再利用するには、メソッド パラメータを使用します。たとえば、再利用するモデル メソッドは次のようになります。

function getUsers($data){
 foreach($data as $key=>$value){
  $this->db->where($key,$value);
}
$query = $this->db->get('users');
return $query->result();
}

このメソッドを拡張すればするほど、再利用できるようになります。拡張のもう 1 つの例です。

 function getUsers($data,$order_by = false){
     foreach($data as $key=>$value){
      $this->db->where($key,$value);
    }
 if($order_by){
  foreach($order_by as $key=>$value){
  $this->db->order_by($key,$value);
  }
  }
    $query = $this->db->get('users');
    return $query->result();
    }

//then you call results with this in your controller
   $results =  $this->model->getUsers(
      $data = array('id'=>'12','country'=>'USA'),
       $order_by = array('username'=>'DESC')
     );

だから今、あなたはまたorder_by、などを追加することができjoins, limit,offset,likeます..すべて同じまたはまったく同じ方法で、より正確になればなるほど、同じ方法を再利用できます

于 2013-04-04T10:16:23.763 に答える