Codeigniter JOIN重设错误的ID

时间:2019-12-09 22:29:47

标签: php mysql codeigniter join

我是Codeigniter的新手,并且因JOIN遇到了问题。

我有2张桌子

super_admin_staff和super_admin_roles

super_admin_staff有一个唯一的id列,名为'id',它也有一个名为'role'的列

“角色”列对应于super_admin_roles的“ id”列。

我的模特:

 function superAdminStaff()
{
    $this->db->select('*');
    $this->db->from('super_admin_staff');
    $this->db->join('super_admin_roles', 'super_admin_staff.role = super_admin_roles.id');


    $query = $this->db->get();

    $result = $query->result();
    return $result;
}

我的课:

public function index()
{

    if ($this->isSuperAdmin() != true) {
        $this->loadThis();
    } else {

        $this->load->model('super_admin_staff_model'); 

        $data['userRecords'] = $this->super_admin_staff_model->superAdminStaff(); 

        // set up page title and description
        $this->global['pageTitle'] = 'Staff List';
        $this->global['pageDesc'] = 'Add, Edit or Resign Staff';

        $this->loadViews("super_admin/staff", $this->global, $data, null); 
    }
}

我的观点:

<tbody>
      <?php
      if (!empty($userRecords)) {
        foreach ($userRecords as $record) {
          ?>
          <tr>

            <td><img src="<?php echo base_url() . 'uploads/super_admin/' . $record->profile_picture ?>" class="wd-100 rounded-circle bd bd-2"></td>
            <td class="align-middle"><?php echo $record->firstname ?></td>
            <td class="align-middle"><?php echo $record->lastname ?></td>
            <td class="align-middle"><?php echo $record->email ?></td>
            <td class="align-middle"><?php echo $record->phone ?></td>
            <td class="align-middle"><?php echo $record->role ?></td>
            <td class="text-center align-middle">

              <a class="btn btn-sm btn-danger deleteUser" href="<?php echo base_url() . 'super_admin_staff/deletestaff/' . $record->id; ?>" data-userid="<?php echo $record->id; ?>"><i class="fas fa-trash"></i></a>
            </td>
          </tr>
      <?php
        }
      }
      ?>

    </tbody>

一切正常,<?php echo $record->role ?>返回角色的名称

但是<?php echo $record->id ?>现在被替换为super_admin_roles表中的ID,而不是预期的super_admin_staff。

所有我想做的就是使用存储在super_admin_staff.roles列中的ID从super_admin_roles中获取角色名称,并且仍然使用super_admin_staff表中的ID,以便我可以基于id删除工作人员。

1 个答案:

答案 0 :(得分:1)

id含糊不清,因为该列存在于查询所涉及的两个表中。

一种解决方案是枚举要查询返回的列。表别名对于缩短查询也很方便。

类似这样:

$this->db->select('s.firstname, s.last_name, s.email, s.email, s.phone, s.role, s.id')
$this->db->from('super_admin_staff as s');
$this->db->join('super_admin_roles as r', 's.role = r.id');

我不确定您实际上是否需要super_admin_roles表中的列。如果这样做,只需将它们添加到select