Php 使用codeigniter中的活动记录从mysql获取复杂数据集
我正在生成发票生成应用程序。其中,我有一个表,该表存储带有标志buyer和invoice_no的发票的各个项目。这些标志帮助我从行中获取聚合发票构造。这就是功能: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
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个查询。就查询生成器而言,它看起来不够复杂,需要运行这么多查询。我所能提供的最好的解决方案是提供一个替代解决方案,前提是您为表提供示例数据和预期输出。我不会撒谎,您的代码对我来说有点不可读,并且遵循每个索引,之后也会在某些条件下进行。请看,我正在尝试创建一个数据集,其中一个实体(元素)表示一个发票详细信息。我所拥有的表包含发票中各个项目的行。每行有发票号和买方