无法在 Codeigniter 中从模型获取查询结果到控制器

Posted

技术标签:

【中文标题】无法在 Codeigniter 中从模型获取查询结果到控制器【英文标题】:Cannot get query result from Model to Controller in Codeigniter 【发布时间】:2017-09-15 01:16:31 【问题描述】:

试图通过调用代码点火器中的存储过程从数据库中获取结果。下面是我的控制器和模型。模型工作正常,从存储过程中获取结果,并且当我在模型中执行 print_r() 时可以显示结果。但我无法在控制器方法中获得查询结果。无法理解这里的错误。

控制器:

function weeklysalesstatus()

    $this->data['rpt']  =$this->reports_model->weeklysalesstatus(true);
    $this->data['page_title'] ='Weekly Sales Status [ Residential ]';
    print_r("here...");
    $this->page_construct('reports/weeklysalesstatus', $this->data);

型号:

public function weeklysalesstatus($sender = false)

    $sql = 'select * from region';
    $sql1 = 'CALL GetWeeklySalesStatus()';
    $query = $this->db->query($sql1); 

    if(count($query) > 0) 
        foreach (($query->result()) as $row) 
            $data[] = $row;
            //var_dump($data);
        
        return $data;
     else  
        print_r("no rows");
    
    return $data;

问题出在这一行:$this->data[$rpt] = $this->reports_model->weeklysalesstatus(); 但是想不通。 谢谢

编辑:

这些错误仅在我调用存储过程 CALL 时出现。对于其他查询,它可以完美运行。那么我需要对 Codeigniter DB 类进行任何设置以通过活动记录调用存储过程吗?

【问题讨论】:

你能发布你的错误信息吗? 如何显示错误信息。它只是没有消息的空白页面。 你可以在index.php中找到"define('ENVIRONMENT',)。你应该写成define('ENVIRONMENT', 'development'); 之后你可以看到错误信息。 你能看到错误信息吗? 【参考方案1】:

$q = $this->db->query('CALL GetWeeklySalesStatus');

将此行改为

$q = $this->db->query('CALL GetWeeklySalesStatus')->result();

【讨论】:

收到此错误:消息:调用数组上的成员函数 result()【参考方案2】:

在模型中

public function weeklysalesstatus()

    //$sql = 'select * from region';
    $sql1 = 'CALL GetWeeklySalesStatus()';
    $query = $this->db->query($sql1); 

    if(!empty($query)) 
    
        $data = $query->result_array();
        return $data;
    
    else 
     
        return FALSE;
    

在控制器中

function weeklysalesstatus()

    $rpt  =$this->reports_model->weeklysalesstatus();

    if ($rpt == FALSE) 
        echo "Empty";
     else 
        $data['rpt'] =  $rpt;
    

    $data['page_title'] ='Weekly Sales Status [ Residential ]';
    $this->page_construct('reports/weeklysalesstatus', $data);

【讨论】:

【参考方案3】:

像下面这样修改控制器希望它可以工作

function weeklysalesstatus()
        
             $this->data['rpt']   =$this->reports_model->weeklysalesstatus();
             $this->data['page_title'] ='Weekly Sales Status';
             $this->page_construct('reports/weeklysalesstatus', $this->data);
        

【讨论】:

我正在做完全相同的事情,然后尝试对代码进行不同的更改,但没有任何效果。如果我将查询从 Call 语句更改为 Select 语句,它将起作用。但是“调用 ”不起作用。在通过 activerecords 调用 codeigniter 中的存储过程时,必须有一些独特的编码方式。【参考方案4】:

你的模型

public function weeklysalesstatus($sender = false)

    $sql = 'select * from region';
    $sql1 = 'CALL GetWeeklySalesStatus()';
    $query = $this->db->query($sql1); 
    $data["result"] = array();
    if(count($query) > 0) 
        foreach (($query->result()) as $row) 
           $data["result"][] = $row;
           //var_dump($data);
        
    
    return $data;

你的控制器

function weeklysalesstatus()

   $data['rpt']  =$this->reports_model->weeklysalesstatus(true);
   $data['page_title'] ='Weekly Sales Status [ Residential ]';
   print_r("here...");
   $this->page_construct('reports/weeklysalesstatus', $data);

【讨论】:

以上是关于无法在 Codeigniter 中从模型获取查询结果到控制器的主要内容,如果未能解决你的问题,请参考以下文章

无法在 codeigniter 中从 gmail 发送电子邮件,SMTP 身份验证错误

模型数组的 Codeigniter 错误

CodeIgniter 模型无法返回特定记录

查询中的 WHERE 子句在 CodeIgniter 3 中无法正常工作

在codeigniter中执行多个无法一一执行的查询

Illuminate\Database\Query\Builder 类的对象无法转换为字符串,无法在单个查询中从两个数据库中获取数据