[英]Codeigniter pass array from controller to model, But not returning a matching result
我试图将一组数据从控制器发送到模型。 但是当我在控制器上打印_r 时,我没有得到相应的“used_id”的匹配“employee_code”。
我的控制器
Controller:
$get_userid = $this->report->get_users_from_manager_id($this->session_user_id);
$data["permit_user_id"] = $get_userid;
foreach($get_userid as $user){
$data["get_employee_code"] = $this->report->get_user_employee_code($user['user_id']);
}
我的型号:
Model:
/**Get User_id From the Manager id */
public function get_users_from_manager_id($manager_d){
// $output = array();
$sql = 'SELECT * FROM manager WHERE manager_id = "'.$manager_d.'"';
$query = $this->db->query($sql);
if ($query->num_rows() > 0) {
$data = $query->result_array();
}
return $data;
}
public function get_user_employee_code($user_id)
{
$sql = 'SELECT * FROM user WHERE user_id = "'.$user_id.'"';
$query = $this->db->query($sql);
if ($query->num_rows() > 0) {
$data = $query->result_array();
}
return $data;
}
我的观点:
Views:
foreach($permit_user_id as $user){
foreach($get_employee_code as $employee_code){
print_r("User_id:".$user['user_id']." Employee_code:".$employee_code['employee_code']."<br>");
}
}
表经理
id user_id manager_id
1 10001 20000
2 10002 20000
3 10003 20000
4 10004 20000
5 10005 20000
6 10006 20000
表用户:
id user_id employee_code
1 10001 500001
2 10002 500002
3 10003 500003
4 10004 500004
5 10005 500005
6 10006 500006
输出我得到的
User_id: 10001 Employee_code: 500006
User_id: 10002 Employee_code: 500006
User_id: 10003 Employee_code: 500006
User_id: 10004 Employee_code: 500006
User_id: 10005 Employee_code: 500006
User_id: 10006 Employee_code: 500006
输出我需要的:
User_id: 10001 Employee_code: 500001
User_id: 10002 Employee_code: 500002
User_id: 10003 Employee_code: 500003
User_id: 10004 Employee_code: 500004
User_id: 10005 Employee_code: 500005
User_id: 10006 Employee_code: 500006
提前致谢
这是你误会的地方:
foreach($get_userid as $user){
$data["get_employee_code"] = $this->report->get_user_employee_code($user['user_id']);
}
在这里,您每次迭代都覆盖$data["get_employee_code"]
。 最后,这个数组中剩下的就是最后一个值“500006”。 你可能想要做的是:
$data["get_employee_code"][] = // <- note the extra brackets
但我也觉得你的视图输出是错误的:
foreach($permit_user_id as $user){
foreach($get_employee_code as $employee_code){
print_r("User_id:".$user['user_id']." Employee_code:".$employee_code['employee_code']."<br>");
}
}
这意味着对于每个用户,您还将输出每个员工 ID,而不仅仅是该用户的 ID,结果如下:
User_id: 10001 Employee_code: 500001
User_id: 10001 Employee_code: 500002
User_id: 10001 Employee_code: 500003
User_id: 10001 Employee_code: 500004
User_id: 10001 Employee_code: 500005
User_id: 10001 Employee_code: 500006
User_id: 10002 Employee_code: 500001
User_id: 10002 Employee_code: 500002
User_id: 10002 Employee_code: 500003
User_id: 10002 Employee_code: 500004
User_id: 10002 Employee_code: 500005
User_id: 10002 Employee_code: 500006
... and so on ...
您应该做的是编写一个查询来获取模型中所需的所有数据,而不是所有这些:
public function get_user_and_employee_ids_from_manager_id($manager_id){
$sql = 'SELECT user.user_id, user.employee_id FROM user JOIN manager ON user.user_id = manager.user_id WHERE manager.manager_id = "'.$manager_id.'"';
$query = $this->db->query($sql);
if ($query->num_rows() > 0) {
$data = $query->result_array();
}
return $data;
}
现在这个$data
是一个数组,其中包含成对的用户和员工 ID 的行,您可以将这些行传递给您的视图,并使用单个foreach
简单地输出。
另外,我不知道 db 查询在后台使用了什么,但找到了一种方法来参数化您的查询。 像这样直接在查询中插入参数是不安全的。
尝试在单个查询中实现这一点可以减少不必要的循环和数据库调用。
SELECT
a.`manager_id`,
a.`user_id`,
b.`employee_code`
FROM
`manager` AS a
INNER JOIN `user` AS b
ON a.`user_id` = b.`user_id`
ORDER BY a.`manager_id` ASC,
a.`id` ASC ;
一旦数据到达查看。
你可以使用这个
或者
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.