Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用codeigniter中的活动记录从mysql获取复杂数据集_Php_Arrays_Codeigniter_Activerecord - Fatal编程技术网

Php 使用codeigniter中的活动记录从mysql获取复杂数据集

Php 使用codeigniter中的活动记录从mysql获取复杂数据集,php,arrays,codeigniter,activerecord,Php,Arrays,Codeigniter,Activerecord,我正在生成发票生成应用程序。其中,我有一个表,该表存储带有标志buyer和invoice_no的发票的各个项目。这些标志帮助我从行中获取聚合发票构造。这就是功能: public function invoice_get() { $data=array(); $this->db->group_by('invoice_no'); $this->db->order_by('invoice_no','asc'); $Q=$this->db

我正在生成发票生成应用程序。其中,我有一个表,该表存储带有标志buyer和invoice_no的发票的各个项目。这些标志帮助我从行中获取聚合发票构造。这就是功能:

public function invoice_get()
{
    $data=array();


    $this->db->group_by('invoice_no');
    $this->db->order_by('invoice_no','asc');
    $Q=$this->db->get('sales');
    echo $Q->num_rows();
    if($Q->num_rows()>0)
    {
        foreach($Q->result_array() as $row)
        {

            if(!isset($data[$row['invoice_no']]))
            {
                $data[$row['invoice_no']]['date']=$row['date'];
                $this->db->where('id',$row['buyer']);
                $q=$this->db->get('ledgers');
                $data[$row['invoice_no']]['buyer']=$q->row();
            }
            else
            {
                $this->db->where('id',$row['item_id']);
                $i=$this->db->get('inventory');
                $data[$row['invoice_no']]['items'][$row['item_id']]=$i->row();

            }

        }
        print_r($data);
        //$this->response($data);
    }


}
问题是我没有得到项目的详细信息 可能是什么错误

$i = 1; 
foreach ($q->result_array() as $row){

$data[$row['invoice_number']]['date'] = $row['date'];
$data[$row['invoice_number']]['buyer']['id'] = $row['id'];
$data[$row['invoice_number']]['item'][$i]['name'] = $row['name'];
$data[$row['invoice_number']]['item'][$i]['description'] = $row['description']; 
//and more if you want to add....
$i++;

}

这会给你想要的结果。

这里有一些非常难看的筑巢。我相信这可以用一种非常简单的方法来完成。@itachi建议:)希望你完全明白用这种方法获取记录的意思。不。我在这里没想到。您正在检查$data中的某些索引,其中as$data将始终是一个空数组,除非您分配了未分配的内容。那么,这个
isset
的目的是什么呢?这个设计有一些缺陷。如果您注意到,对于返回的每一行,都会运行另一个查询。如果您只返回100行,它将运行另外100个查询。就查询生成器而言,它看起来不够复杂,需要运行这么多查询。我所能提供的最好的解决方案是提供一个替代解决方案,前提是您为表提供示例数据和预期输出。我不会撒谎,您的代码对我来说有点不可读,并且遵循每个索引,之后也会在某些条件下进行。请看,我正在尝试创建一个数据集,其中一个实体(元素)表示一个发票详细信息。我所拥有的表包含发票中各个项目的行。每行有发票号和买方