在CodeIgniter中查询多对多表时,如何保持模型松散耦合?
我使用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,并有一个连接,其中包含我需要的关于每个产品的所有数据 这很好,但我现在担心的是,我正在沿着一条紧密耦合的路径前进。例如,假设我想
- 用户-用户表
- 产品-产品表
- UserProduct—显示哪些用户拥有哪些产品的表(两个外键列和一些其他列,如date)
菲尔。我的个人标准是始终创建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个模型而不是嵌套方法