说我需要显示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');
}
忽略上面代码的不完整性,我只是想传达这个概念。
我是否在模型或控制器级别进行连接?
我担心的是:
答案 0 :(得分:1)
作为最佳实践,您应始终将所有与存储相关的逻辑置于模型级别之下。控制器应该只知道如何调用模型的方法并从HTTP请求传递参数。
如果您有JOIN并希望重用生成的片段,则可以创建共享方法并根据需要调用它。例如:
class UserModel
{
// ....
public function appendJoin($db)
{
$db->findUsers()->join(....)
}
// ....
}
然后你可以在控制器中重复使用它。
答案 1 :(得分:1)
您应该在Model中创建通常与数据库相关的函数,以便重用它。 但是,您可以在控制器中使用数据库相关功能($ db-> findUsers() - > join(....))来实现您的目标,而不受数据库查询执行速度的影响等...