0

我正在使用 CodeIgniter 并有三个表和一个模型:

  • 用户 - 用户表
  • 产品 - 产品表
  • UserProduct - 显示哪些用户拥有哪些产品的表(两个外键列和一些其他列,例如日期)

在我的代码中,我想为特定用户显示一个列表,显示他们拥有哪些产品。因此,我在 UserProduct 类中有一个方法,它对与 userId 匹配的 UserProduct 表进行选择,并通过一个连接来引入我需要的关于每个产品的所有数据。

这很好用,但我现在担心我正在走紧耦合的道路。例如,假设我想找出产品图片的 URL。我在产品模型中有一个方法来返回它,我不想在 UserProduct 模型中使用重复的方法,并且我不想通过让 UserProduct 模型尝试访问其他模型中的方法来创建耦合(我不要认为 CodeIgniter 喜欢你这样做)。

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

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

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();
}

您扩展此方法的次数越多,您可以重复使用的次数越多,这只是扩展的另一个示例:

 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 回答