最佳实践1:许多加入Codeigniter胖模型,瘦控制器?

时间:2015-10-14 13:31:05

标签: php mysql codeigniter join

说我需要显示users和每个user的列表,其中可以有多个user_roles

列表需要显示: id,用户名,文本中的角色,例如

1 | john | member, moderator, admin

我有三张桌子,即:

  1. user包含用户信息
  2. user_role包含角色,即user_role.id和user_role.name
  3. user_user_role加入表,即user_id,role_id
  4. 用户列表控制器:

    function list_users(){
        // Should I join here?
        $this->user_model->find_users();
    }
    

    用户模型:

    function find_users(){
        // Should I join here?
        return $this->db->get('user');
    }
    

    忽略上面代码的不完整性,我只是想传达这个概念。

    我是否在模型或控制器级别进行连接?

    我担心的是:

    1. 试图实现胖模型,瘦身控制器。
    2. 如果我在模型级别上进行连接,那么模型函数太具体了,不太可能在别处重复使用。
    3. 如果我在控制器级别进行连接,则模型保持通用(这很好)

2 个答案:

答案 0 :(得分:1)

作为最佳实践,您应始终将所有与存储相关的逻辑置于模型级别之下。控制器应该只知道如何调用模型的方法并从HTTP请求传递参数。

如果您有JOIN并希望重用生成的片段,则可以创建共享方法并根据需要调用它。例如:

class UserModel
{
    // ....

    public function appendJoin($db)
    {
        $db->findUsers()->join(....) 
    }

    // ....
}

然后你可以在控制器中重复使用它。

答案 1 :(得分:1)

您应该在Model中创建通常与数据库相关的函数,以便重用它。 但是,您可以在控制器中使用数据库相关功能($ db-> findUsers() - > join(....))来实现您的目标,而不受数据库查询执行速度的影响等...