繁体   English   中英

Codeigniter 将数组从控制器传递到模型,但不返回匹配结果

[英]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 ;

一旦数据到达查看。

你可以使用这个

或者

  • 为 manager_id 声明数组。
  • 循环结果
  • 您可以通过检查 in_array 调用来区分 manager_id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM