管理员使用codeigniter分配数据后,当用户登录时如何从postgresql数据库中获取特定数据?
Posted
技术标签:
【中文标题】管理员使用codeigniter分配数据后,当用户登录时如何从postgresql数据库中获取特定数据?【英文标题】:How to get the specific data from postgresql database when an user logs in after admin assigning the data using codeigniter? 【发布时间】:2019-10-02 06:47:13 【问题描述】:我正在制作一个有 1 个管理员和 10-15 个用户的项目。
对于每个用户,我只想向他们显示专门分配给他们的案例,以便在管理员分配他们时加载到他们的仪表板上。未分配给他们的案例将不会在他们的仪表板上列出。
管理员可以成功地将 case_id 分配给一个表
这是 case_assignment 表,其中包含 case_id(管理员分配)、用户名(案例分配给谁)、分配日期。
类似的用户表有用户名,密码,级别(管理员为1,所有其他用户为2),电子邮件
如果管理员已将案例(case_id 将存在)分配给 case_assignment 表中的特定用户名,那么,当用户登录时,他应该能够看到与该特定 case_id 相关的所有数据(表)。 这是截图:
管理页面:https://prnt.sc/novscc --> 这是为管理员显示数据表的方式.. 他将拥有所有案例数据。当他将案例分配给用户时。用户应该只收到这种情况。
用户页面:https://prnt.sc/novtnr -> 这是我希望在管理员分配案例时显示用户数据表的方式。
这是数据库 case_assigment 表屏幕截图:https://prnt.sc/novtze(此处只有管理员想要分配的 case_id 和用户名)。
这是视图,user.php
<table id="table" class="table table-striped table-bordered display nowrap" cellspacing="0" "style="width: 650px;">
<thead>
<tr>
<th>Case ID</th>
<th>Case Name</th>
<th>Firm Name</th>
<th>Case Overview</th>
<th>Priority</th>
<th>Received Date</th>
<th>Expected Delivery Date</th>
<th>Service Status</th>
</tr>
</thead>
<tbody>
<?php
if($result)
foreach ($result as $results)
?>
<tr>
<td><?php echo $results->case_id; ?></td>
<td><?php echo $results->case_name; ?></td>
<td><?php echo $results->firm_name; ?></td>
<td><?php echo $results->case_description; ?></td>
<td><?php echo $results->priority; ?></td>
<td><?php echo $results->received_date; ?></td>
<td><?php echo $results->expected_delivery_date; ?></td>
<td><?php echo $results->service_status; ?></td>
</tr>
<?php
?>
</tbody>
</table>
这是我的控制器 (employee.php)
public function index()
$this->load->helper('url');
$this->session->userdata('username');
$data['result'] = $this->HomeModel->get_employee($case_id);
$this->load->view('case/user',$data);
//print_r($data);
//die;
这是我的模型 (HomeModel.php)
public function get_employee($case_id)
$this->session->userdata('username');
$this->db->select('case_main.case_id,
case_main.case_name,
case_main.firm_name,
case_overview.case_description,
case_priority.priority,
service_delivery_dates.received_date,
service_delivery_dates.expected_delivery_date,
service_delivery_dates.service_status');
$this->db->from('case_tracker.case_assignment');
$this->db->join('case_tracker.case_main', 'case_tracker.case_assignment.case_id=case_tracker.case_main.case_id');
$this->db->join('case_tracker.case_overview', 'case_tracker.case_main.case_id = case_tracker.case_overview.case_id','left');
$this->db->join('case_tracker.case_priority', 'case_tracker.case_overview.case_id = case_tracker.case_priority.case_id' , 'left');
$this->db->join('case_tracker.service_delivery_dates', 'case_tracker.case_priority.case_id = case_tracker.service_delivery_dates.case_id' , 'left');
$this->db->where('case_assignment_case_id', $case_id);
$data = $this->db->get();
return $data->result();
注意:- 这里 case_main、case_overview、case_priority、service_delivery_dates 是数据库中的不同表,case_tracker 是我的架构名称。
我不知道在控制器中写什么来获取管理员分配的 case_id,当用户登录时,他/她应该能够看到特定 case_id 的所有数据
预期结果:- 管理页面:https://prnt.sc/novscc --> 这是为管理员显示数据表的方式.. 他将拥有所有案例数据。当他将案例分配给用户时。用户应该只收到这种情况。
用户页面:https://prnt.sc/novtnr -> 这是我希望在管理员分配案例时显示用户数据表的方式。
这是数据库 case_assigment 表屏幕截图:https://prnt.sc/novtze(此处只有管理员想要分配的 case_id 和用户名)。
对于每个用户,我只想向他们显示专门分配给他们的案例,以便在管理员分配他们时加载到他们的仪表板上。未分配给他们的案例将不会在他们的仪表板上列出。
如果管理员已将案例(case_id 将存在)分配给特定用户名,那么,当用户登录时,他应该能够看到与该特定 case_id 相关的所有数据(表格)。
请帮助我,我是新手,正在学习编程语言。
【问题讨论】:
这两个概念似乎相互冲突:“对于每个用户,我只想向他们显示专门分配给他们的 案例”与“当用户登录时,他应该能够查看与特定 case_id [single case?]" 相关的所有数据(表)是什么?您的代码似乎暗示后者。另外,上面的查询有效吗?还是失败了?因为似乎有一些奇怪的事情。 @Alex 让我说清楚,管理员分配 case_id(一旦分配,它将进入 case_assignment 表),当用户登录时,仪表板中应该出现所有具有相同 case_id 的表。例如:如果管理员分配 case_id=A00010。此 case_id (A00010) 将出现在 case_assignment 表中,该表具有以下列(case_id、用户名、assigned_on)。当用户登录时,他应该能够从所有表中看到具有 case_id=A100010 的数据 【参考方案1】:您必须首先选择分配给用户的所有案例
select * from cases where user_id=2
在循环中获取所有案例
然后为每个案例获取数据
【讨论】:
【参考方案2】:根据您的评论,我假设一名员工被分配到一个案例。因此:
function get_employee_case()
$this->db->select('case_id');
$this->db->where('username', $this->session->userdata('username'));
$q = $this->db->get('case_assignment');
if ($q->num_rows() == 1)
return $q->row()->case_id;
return null;
控制器:
$case_id = $this->HomeModel->get_employee_case();
if (!is_null($case_id))
$data['result'] = $this->HomeModel->get_employee($case_id);
else
$data['result'] = null;
查看:
if (is_null($result))
echo 'no case assigned';
else
...
【讨论】:
感谢您的帮助,但我什至希望表行中的数据具有 case_id 像这样prnt.sc/notfqk(附加屏幕截图) 预期结果:- 管理页面:prnt.sc/novscc --> 这将如何为管理员显示数据表.. 他将拥有所有案例数据。当他将案例分配给用户时。用户应该只收到这种情况。用户页面:prnt.sc/novtnr -> 这是我希望在管理员分配案例时显示用户数据表的方式。这是数据库 case_assigment 表的屏幕截图:prnt.sc/novtze(这里只有管理员想要分配的 case_id 和用户名) 我不明白这个问题。您在第一条评论中的屏幕截图有 2 行,而“我想要用户数据表的方式”有 1 行。我在这里没有得到明确的答案。你发布的所有内容对我来说似乎都是矛盾的。上面的代码输出什么? 嗨,alex,谢谢你的帮助,我改变了你的代码,现在我得到了我想要的结果:) 我建议你发布你的答案;也许它会帮助别人!无论如何,如果我的回答在某种程度上有所帮助,我们将不胜感激。【参考方案3】:感谢@Alex 的帮助,
这是我正在寻找的结果:
Controller:
public function index()
$data['result'] = $this->HomeModel->get_employee_case();
$this->load->view('case/user');
/*
print_r($data);
die; */
Model:
function get_employee_case()
$this->db->select('case_assignment.case_id,
case_main.case_name,
case_main.firm_name,
case_overview.case_description,
case_priority.priority,
service_delivery_dates.received_date,
service_delivery_dates.expected_delivery_date,
service_delivery_dates.service_status');
$this->db->from('case_tracker.case_assignment');
$this->db->join('case_tracker.case_main', 'case_tracker.case_assignment.case_id=case_tracker.case_main.case_id', 'left');
$this->db->join('case_tracker.case_overview', 'case_tracker.case_main.case_id=case_tracker.case_overview.case_id', 'left');
$this->db->join('case_tracker.type_of_services', 'case_tracker.case_overview.case_id = case_tracker.type_of_services.case_id', 'left');
$this->db->join('case_tracker.specific_instructions', 'case_tracker.type_of_services.case_id = case_tracker.specific_instructions.case_id' , 'left');
$this->db->join('case_tracker.case_priority', 'case_tracker.specific_instructions.case_id = case_tracker.case_priority.case_id' , 'left');
$this->db->join('case_tracker.service_delivery_dates', 'case_tracker.case_priority.case_id = case_tracker.service_delivery_dates.case_id' , 'left');
$this->db->where('case_assignment.username', $this->session->userdata('username'));
$query = $this->db->get();
return $query->result();
【讨论】:
以上是关于管理员使用codeigniter分配数据后,当用户登录时如何从postgresql数据库中获取特定数据?的主要内容,如果未能解决你的问题,请参考以下文章