2011-05-25 70 views
0

PlanDetails hasMany Companies。 PlanDetail表具有company_id字段。CakePHP根據hasMany關係在數組()中獲得匹配

這就是我需要實現的一切:PlanDetail.company_id = Company.id。因此,獲取PlanDetail.company_id與Company.id匹配的所有計劃詳情。

這是我在plan_details_controller被搞亂與查詢:

function pd_list_by_company() { 
    $this->PlanDetail->unbindModel(array('hasMany' => array('Plan'))); 
    $comp_id = $this->PlanDetail->Company->find('all'); 
    $result = $this->PlanDetails->find('all', array('conditions' => array 
('Company.id' => 'PlanDetail.company_id'))); 
    $company_id = $this->PlanDetail->read('company_id'); 
    } 

我不能只是得到我需要的..結果我究竟做錯了什麼?

+0

你有什麼不應該甚至解析。而且,CakePHP會自動爲您加入。你想要什麼「查找()」到底是什麼? – 2011-05-25 00:46:53

+0

無論我如何處理這個條件,我都會得到一個完全空的數組()..而沒有結果。 – OldWest 2011-05-25 00:54:46

+0

我的$結果不會顯示一個包含數據的數組嗎?我正在嘗試獲取PlanDetail.company_id = Company.id等所有Plan計劃詳細信息。因此,如果Company.id與PlanDetail.company_id匹配,那麼我會得到每個結果...這是否有助於澄清? – OldWest 2011-05-25 00:55:23

回答

2

聽起來像在company_id領域一個簡單的條件對我說:

$this->PlanDetail->find('all', array('conditions' => array('company_id' => $company_id))) 

或者,如果你想在公司,而且您的關聯是正確掛接:

$company = $this->Company->read(null, $company_id); 

// echo $company['Company'] 
// echo $company['PlanDetail'][0], $company['PlanDetail'][1] etc... 

您需要得到一個$company_id從某個地方查詢,這通常是網址:

public function pd_list_by_company($company_id) 

然後通過網址/plan_details/pd_list_by_company/42訪問此操作,該鏈接可使用$this->Html->link('foobar', array('controller' => 'plan_details', 'action' => 'pd_list_by_company', 42))進行鏈接。

完整的示例:

public function view($planId) { 
    $plan = $this->PlanDetail->read(null, $planId); 
    if (!$plan) { 
     $this->cakeError('error404'); 
    } 
    $otherPlansBySameCompany = $this->PlanDetail->find('all', array(
     'conditions' => array('company_id' => $plan['PlanDetail']['company_id']) 
    )); 
    $this->set(compact('plan', 'otherPlansBySameCompany')); 
} 
+0

這是我一直在做的:$ this-> set('planComps',$ this-> PlanDetail-> find('all',array('conditions'=> array('PlanDetail。我的sql_dump也是準確的:SELECT'PlanDetail'.'id','PlanDetail'.'name','PlanDetail'.'company_id' ,'Company'.''','Company'.'name' FROM'plan_details'由於'PlanDetail'左加入'公司'作爲'公司'ON('PlanDetail'.'company_id' ='Company'.'id' )WHERE'company_id' ='company.id'.....但是我的調試(planComps)總是一個空數組.. ..這沒有意義:( – OldWest 2011-05-25 05:22:03

+0

您的條件說*「WHERE'company_id'等於字符串「Company.id」*。這是沒有意義的。另外,如果你正在尋找*某個特定的公司*,你必須在某處插入實際的數字ID – deceze 2011-05-25 05:23:54

+0

但isnt'company.id'應該讀取從當前查找數組()獲得公司ID字段值?這些關係都是正確的 – OldWest 2011-05-25 05:41:37

0

我顯示設置()找出導致該計劃詳細view.ctp。

這是我如何解決它:

function view($id = null) { 
    if (!$id) { 
     $this->Session->setFlash(__('Invalid plan detail', true)); 
     $this->redirect(array('action' => 'index')); 
    } 
    $this->set('planDetail', $this->PlanDetail->read(null, $id)); 
     $cid = $this->PlanDetail->read('Company.id'); 
     $cid_extract = Set::extract($cid, 'Company.id'); 
    $this->set('planComps', $this->PlanDetail->find('all',array('conditions' => array("company_id" => $cid_extract)))); 
} 
+1

似乎極其令人費解。看到我的更新。 – deceze 2011-05-25 07:06:30

+0

是的,它確實是一個黑客。它的工作原理,但我喜歡你的示例簡單.. – OldWest 2011-05-25 07:20:46