CakePHP array()是空的,但查询似乎得到了正确的结果

时间:2011-05-24 20:33:41

标签: php sql cakephp controller

我正在尝试仅提取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值没有条件??

感谢您的任何提示。

3 个答案:

答案 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');