在CodeIgniter中查询多对多表时,如何保持模型松散耦合?

在CodeIgniter中查询多对多表时,如何保持模型松散耦合?,codeigniter,join,model,many-to-many,loose-coupling,Codeigniter,Join,Model,Many To Many,Loose Coupling,我使用CodeIgniter,有三个表,每个表有一个模型: 用户-用户表 产品-产品表 UserProduct—显示哪些用户拥有哪些产品的表(两个外键列和一些其他列,如date) 在我的代码中,我想为特定用户显示一个列表,显示他们拥有哪些产品。因此,我在UserProduct类中有一个方法,该方法在UserProduct表上执行一个与userId匹配的select,并有一个连接,其中包含我需要的关于每个产品的所有数据 这很好,但我现在担心的是,我正在沿着一条紧密耦合的路径前进。例如,假设我想

我使用CodeIgniter,有三个表,每个表有一个模型:

  • 用户-用户表
  • 产品-产品表
  • UserProduct—显示哪些用户拥有哪些产品的表(两个外键列和一些其他列,如date)
在我的代码中,我想为特定用户显示一个列表,显示他们拥有哪些产品。因此,我在UserProduct类中有一个方法,该方法在UserProduct表上执行一个与userId匹配的select,并有一个连接,其中包含我需要的关于每个产品的所有数据

这很好,但我现在担心的是,我正在沿着一条紧密耦合的路径前进。例如,假设我想找到产品图像的URL。我在产品模型中有一个方法可以返回这个,我不想在UserProduct模型中有一个重复的方法,我也不想让UserProduct模型尝试访问其他模型中的方法来创建耦合(我认为CodeIgniter不喜欢您这样做)

此问题似乎可能发生在访问具有外键的DB表的任何模型中,该模型可能需要来自父表的数据并希望对其进行操作

是否有一个优雅的解决方案,或者我是否需要接受外键必然会在模型中创建耦合,或者需要跨模型使用类似的方法

蒂亚,
菲尔。

我的个人标准是始终创建1个控制器+1个模型

例如
site.com/users
将使用
model\u users.php
site.com/products
将使用
model\u products.php

要精简代码和重用方法,请使用方法参数。例如,要重用的模型方法可以是:

function getUsers($data){
 foreach($data as $key=>$value){
  $this->db->where($key,$value);
}
$query = $this->db->get('users');
return $query->result();
}
扩展此方法越多,可以重复使用的次数就越多,这只是扩展的另一个示例:

 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')
     );

现在您还获得了按排序的,等等,您可以添加连接、限制、偏移,如等。。总之,你越准确,就越能重复使用相同的方法

谢谢OK。我不确定我是否喜欢这个解决方案,因为它会带来一个不断增长的基础模型,其中包含各种不同功能的业务逻辑方法。当然,特定于表的方法应该出现在各自的模型中,而不是出现在由所有其他模型扩展的基础模型中?@PhilipWattis sure table->model;)如果需要连接,请使用1个模型而不是嵌套方法