2013-05-03 107 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(); 
} 
相關問題