我是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删除工作人员。
答案 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
。