我正在尝试仅提取PlanDetail.company_id = Company.id和PlanDetail.id'=>的PlanDetails。 $ id ..(您可以在下面的控制器中查看条件)..
控制器:
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一个find('all')上的.id值没有条件??
感谢您的任何提示。
答案 0 :(得分:1)
由于$id
似乎为null,我假设您在没有参数的情况下调用该函数。并且您没有收到错误消息,因为就PHP而言,参数是可选的。在这种情况下,它显然是必需的,因此您应该在函数声明中将其作为必需参数:
function pd_list_by_company($id) {
你也可以简化return语句,你不需要AND:
return $this->PlanDetail->find('all',
array('conditions' =>
array('PlanDetail.company_id' => 'Company.id','PlanDetail.id' => $id)
)
);
答案 1 :(得分:1)
要回答这个问题,为什么没有传递$ id是因为你没有传递它
要传递$ id of 2,您需要在requestAction中执行以下操作
$这 - > requestAction( '/ planDetails / pd_list_by_company / 2');
答案 2 :(得分:0)
在我看来,您的代码应该只是
return $this->PlanDetail->find('array('PlanDetail.id' => $id));
假设您已将$ this-> PlanDetail->递归标记设置为> 0,您的模型应该已经知道并返回任何“公司”表的相关数据.....
我习惯了CakePHP的旧版本(1.3),但find()函数非常基本,只能返回一行。
是的,你肯定需要调用附加到url的id的函数,例如
$planDetailsByCompany = $this->requestAction('/planDetails/pd_list_by_company/999');