CakePHP基于hasMany关系在array中获取匹配项

问题描述

|| PlanDetails有很多公司。 PlanDetail表具有company_id字段。 这就是我需要实现的全部: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\');
    }
我不能只是获得所需的结果。.我在这里做错了什么?     

解决方法

在我看来,on1字段上的条件很简单:
$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...
您需要从某个地方(通常是URL)查询
$company_id
public function pd_list_by_company($company_id)
然后使用URL
/plan_details/pd_list_by_company/42
访问此操作,该URL可以使用
$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\'));
}
    ,我在“计划详细信息” view.ctp中显示set()查找结果。 这是我解决的方法:
    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))));
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...