2011-05-24 30 views
1

我想只提取PlanDetails在哪裏PlanDetail.company_id = Company.id和PlanDetail.id'=> $ id ..(你可以看到下面我控制器)的條件..CakePHP數組()是空的,但查詢似乎得到正確的結果

控制器:

function pd_list_by_company($id = null) { 
    $this->recursive = 2; // I am going to use containable to trim this. 
    return $this->PlanDetail->find('all', 
     array('conditions' => 
     array('AND' => 
     array('PlanDetail.company_id' => 'Company.id', 
     array('PlanDetail.id' => $id))))); 
    } 

測試視圖:我調試的

$planDetailsByCompany = $this->requestAction('/planDetails/pd_list_by_company'); 

debug($planDetailsByCompany); 

輸出結果?

Array() 

如果我刪除的條件,只是有發現所有,我得到的所有PlanDetails如預期,所以我知道數據被傳遞.. SQL調試轉儲甚至顯示查詢:

WHERE ((`PlanDetail`.`company_id` = 'Company.id') AND (`PlanDetail`.`id` IS NULL)) 

是的,我注意到$ id是NULL,並且我知道該值需要在那裏..所以也許我的問題是爲什麼$ id值沒有被傳遞給控制器​​,即使我可以看到PlanDetail.id找到('all')w/out條件的值

感謝您的任何提示。

回答

1

由於$id似乎爲空,我會假設你調用沒有參數的函數。並且您不會收到錯誤消息,因爲就PHP而言,該參數是可選的。在這種情況下,這顯然是必需的,所以你應該讓你的函數聲明所需的參數:

function pd_list_by_company($id) { 

你也可以簡化return語句,你不需要和:

return $this->PlanDetail->find('all', 
    array('conditions' => 
     array('PlanDetail.company_id' => 'Company.id','PlanDetail.id' => $id) 
    ) 
); 
+0

我也試過。沒有價值被傳遞。 ||警告(2):缺少參數1 for PlanDetailsController :: pd_list_by_company()[APP/controllers/plan_details_controller.php,179行] 注意(8):未定義變量:id [APP/controllers/plan_details_controller.php,第181行] – OldWest 2011-05-24 21:42:00

+0

這意味着你應該檢查函數的調用位置,並確保它指定了一個參數。這個問題似乎不在'pd_list_by_company()'中,而是在你調用函數的地方。 – Arjan 2011-05-24 21:45:44

1

要回答爲什麼是$ ID沒有被傳遞的問題是,因爲你沒有傳遞

要通過說出2 $ ID,你需要做你的requestAction以下

$ this-> requestAction('/ planDetails/pd_list_by_company/2');

+0

嗯。這沒有改變,但我理解你的觀點。我可以調用函數內的值,如:$ this-> PlanDetail-> id - 給我當前在url中相關的ID ...我只是想運行一個基於PlanDetail.company_id匹配的每個PlanDetail的foreach Company.id ..我不認爲這會非常棘手。 – OldWest 2011-05-24 22:23:42

+0

你爲什麼要在條件中聲明AND,爲什麼需要定義與公司的關係?它將在模型中聲明否? – Leo 2011-05-24 22:34:41

+0

您還需要在條件中刪除user_id附近的數組聲明 – Leo 2011-05-24 22:49:20

0

在我看來,你的代碼應該只是

return $this->PlanDetail->find('array('PlanDetail.id' => $id)); 

假設你有$這個 - > PlanDetail->遞歸標誌設置爲> 0,你的模式應已經瞭解並返回相關的數據任何「公司」表.....

我已經習慣了舊的(1.3)版本的CakePHP,但find()函數是非常基本的,並被設計爲只返回一行。

是的,你一定需要調用該函數的ID附加到該網址,例如。

$planDetailsByCompany = $this->requestAction('/planDetails/pd_list_by_company/999'); 
相關問題