管理员使用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数据库中获取特定数据?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 抛出错误并且不向用户发送确认邮件

Codeigniter:如何使用数据库和用户会话数据构建多语言网站?

Codeigniter将数据库值分配给变量

如何为SqlServer2008数据库分配用户

权限控制:分配权限1

使用连接(codeigniter)从单个字段中检索和打印逗号分隔符后的值