2013-05-03 162 views
0

在我的控制器中,我有一个查询结果列表(最多10行左右)。我正在尝试使用查询的结果在另一个中使用。例如,第一查询翻出 'agency_ID'(数据我希望在接下来的查询使用)Codeigniter - 在另一个查询中使用查询结果

控制器:

$data['list_report'] = $this->reports_model->filteredReport(); 
$data['area_data'] = $this->reports_model->getAreaDataReport($data['list_report']); 

MODEL:

function getAreaDataReport($data) 
{  
    $query = $this->db->query('SELECT COUNT(asa.sector_ID) AS area_count, asa.*, ags.sector 
    FROM agencies_sector_association asa, agencies_sector ags WHERE agency_ID IN ('. $data->agency_ID .') 
    AND asa.agency_ID = ags.ID 
    GROUP BY agency_ID'); 
    return $query->result(); 
} 

我得到这个错误:

Message: trying to get property of non-object codeigniter model 

当我print_r第一个查询结果时,我得到以下内容。

Array ([0] => stdClass Object ([case_ID] => 1 [reference_ID] => IFSOU001 [ID] => 1 [agency_ID] => 1 [agency_name] => Agency1 [task_ID] => 3 [task] => Domestic violence [outcome_ID] => 3 [outcome] => Protection plan no longer in place [creation_date] => 2012-12-05) [1] => stdClass Object ([case_ID] => 3 [reference_ID] => NEW REFERENCE ID [ID] => 2 [agency_ID] => 1 [agency_name] => Agency1 [task_ID] => 1 [task] => Transport [outcome_ID] => 8 [outcome] => Bespoke needs based assessment received [creation_date] => 2013-05-01) [2] => stdClass Object ([case_ID] => 6 [reference_ID] => REFERENCE ID [ID] => 6 [agency_ID] => 1 [agency_name] => Agency1 [task_ID] => 2 [task] => Counselling [outcome_ID] => 2 [outcome] => Improved school attendance [creation_date] => 2013-05-01)) 

我的问题是怎么用的第一条语句的agency_ID在我的下一个语句作为一个数组所以它不会只是返回一行。从这个结果中,我得到3个'agency_ID'的结果,但在未来的搜索中可能会更多。

非常感谢所有能够帮助的人!

回答

1

$data是仅包含一个对象的对象数组。

替换$data->agency_ID$data[0]->agency_ID

这将使您的$data阵列中储存在[0]位置的对象的agency_ID成员变量。

假设你有结果的阵列中的多个对象,您将需要得到的ID,并将其存储在一个字符串,然后在查询中使用此字符串现在

$id_str = ''; 
foreach($data as $agency) { 
    $id_str .= $agency->agency_ID . ', '; 
} 
$id_str = rtrim($id_str, ', '); //remove the trailing comma and space 

与您的查询替换$data->agency_ID$id_str

+0

完美工作,谢谢!祝我早日康复! – Pooshonk 2013-05-03 09:31:20

0

您必须重新格式化您的结果数组,以便它符合IN语句。像23, 17, 20这样的格式。 $this->reports_model->filteredReport();应返回result_array()

$data['list_report'] = $this->reports_model->filteredReport(); 

$data_list = array(); 

foreach($data['list_report'] as $lp) { 
    $data_list[] = $lp->agency_ID; 
} 

$data['area_data'] = $this->reports_model->getAreaDataReport(implode(',',$data_list)); 

,然后只用在您的查询字符串:

function getAreaDataReport($data) 
{  
    $query = $this->db->query('SELECT COUNT(asa.sector_ID) AS area_count, asa.*, ags.sector 
    FROM agencies_sector_association asa, agencies_sector ags WHERE agency_ID IN ('.$data.') 
    AND asa.agency_ID = ags.ID 
    GROUP BY agency_ID'); 
    return $query->result(); 
} 
相关问题