【发布时间】:2015-10-14 13:31:05
【问题描述】:
假设我需要显示users 和每个user 的列表,其中可以有多个user_roles。
列表需要显示: id、用户名、文本中的角色,例如。
1 | john | member, moderator, admin
我有三张表,分别是:
-
user包含用户信息 -
user_role包含角色,即 user_role.id 和 user_role.name -
user_user_role一个连接表,即user_id,role_id
用户列表控制器:
function list_users(){
// Should I join here?
$this->user_model->find_users();
}
用户模型:
function find_users(){
// Should I join here?
return $this->db->get('user');
}
忽略上面代码的不完整性,我只是想传达这个概念。
我是否在模型或控制器级别进行连接?
我的担忧是:
- 尝试实现胖模型,瘦控制器。
- 如果我在模型级别进行连接,模型函数由于过于具体,不太可能在其他地方重用。
- 如果我在控制器级别进行连接,模型将保持通用(这很好)
【问题讨论】:
-
在模型中再添加一种方法的实际问题是什么?您可以将
APPPATH . 'MY_Model.php'中的泛型类与所有通常需要的方法一起使用,而不是从中扩展特定模型。以this one 为例。 -
@Tpojka:你误会了。模型中的另一种方法没有问题,而且我已经从核心模型进行了扩展。这里的问题是在模型中编写一个特定于控制器用例的方法,它不会在其他地方重用。
-
不确定,可能我理解错了。但我仍然认为它是一个可以专用于一种方法的查询。没有错:像
SELECT user.username, group_concat(user_role.name separator ', ') FROM user_user_role JOIN user_role ON user_role.user_role_id=user_user_role.user_role_id JOIN user ON user.user_id=user_user_role.user_id WHERE user_id= ?这正是我提到另一种方法的确切意义。这就是我将如何使用它。也许对你没有帮助,而不是我误解了这个问题。
标签: php mysql codeigniter join