我想通过以下方式获得您的MVC经验:
我有一张表格,其中我说user_id
哪个group_id
和第二个表格,其中我说user_id
哪个user_name
。
现在我想要一个我传递group_id
的函数,它会给我组中的所有user_name
个。
问题是,Controller做了什么以及模型是什么:
控制器调用返回用户ID的模型(get_user_ids_from_group
),然后控制器调用不同的模型(get_user_name_by_id
)以返回用户名。
控制器调用Model(`get_user_names_from_group),模型内部首先获取用户ID,然后是用户名。
据我所知,第一种方式是更严格的MVC。但是在这样的情况下你会有多严格?现在我总是非常严格。
结果我的模型函数总是只有两行(查询和返回),我的控制器更大。因此,为了使控制器和模型尺寸更加平等,第二种选择是可能的。
答案 0 :(得分:2)
实际上,它与MVC无关,如CodeIgniter doesn't implement MVC,而是一种 MVP 。
但是,如果你正在使用像MySQL这样的RDBMS,你可以JOIN
这两个表(在模型中)并按照我在 {{3}中的建议获取结果(在Controller中)在
<强>应用/模型/ user.php的强>
class User extends CI_Model
{
public function get_users_by_group($group_id)
{
$this->db->select('*')->from('groups');
// While group_id and user_id have a N:1 relation
$this->db->where('group_id', $group_id);
$this->db->join('users', 'users.user_id = groups.user_id');
$query=$this->db->get();
return $query->result_array();
}
}
然后在Controller中获取并传递结果:
<强>应用/控制器/ users.php 强>
class Users extends CI_Controller
{
public function view($group_id)
{
$this->load->model('user');
// Fetch the result from the database
$data['users'] = $this->user->get_users_by_group($group_id);
// Pass the result to the view
$this->load->view('users_view', $data);
}
}
答案 1 :(得分:0)
在MVC模型中,不仅应该用于存储和获取数据,还应该包含业务逻辑。
控制器 - 应该将输入与模型和视图进行通信
模型 - 应包含业务逻辑和数据存储
查看 - 仅适用于输出
所以它就像Input -> Process -> Output
此外,它依赖于你在哪里放置什么,你应该在控制器和模型上有一个平衡代码,不在控制器或模型中写入所有内容
在你的情况下,我认为你应该使用get_user_names_from_group
并只传递组名并在两个表之间进行连接查询。当您在模型中定义函数时,它为您提供了再次重用该函数的选项,以防您在下一个控制器上需要相同的内容。
答案 2 :(得分:0)
通用模型示例:
{{1}}