【问题标题】:CakePHP array() is empty, but query seems to be getting the correct resultsCakePHP array() 为空,但查询似乎得到了正确的结果
【发布时间】:2011-05-24 20:33:40
【问题描述】:

我正在尝试仅提取 PlanDetail.company_id = Company.id AND PlanDetail.id' => $id.. 的 PlanDetails(您可以在下面我的控制器中查看条件)..

控制器:

    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 值??

感谢任何提示。

【问题讨论】:

    标签: php sql cakephp controller


    【解决方案1】:

    由于$id 似乎为空,我假设您在没有参数的情况下调用该函数。而且您不会收到错误消息,因为就 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)
        )
    );
    

    【讨论】:

    • 我也试过了。没有值被传递。 ||警告 (2):PlanDetailsController::pd_list_by_company() [APP/controllers/plan_details_controller.php,第 179 行] 缺少参数 1 ||注意(8):未定义变量:id [APP/controllers/plan_details_controller.php, line 181]
    • 这意味着您应该检查函数的调用位置并确保它指定了一个参数。问题似乎不在于pd_list_by_company(),而在于您调用该函数的位置。
    【解决方案2】:

    要回答为什么 $id 没有被传递的问题是因为你没有传递它

    要传递 $id of 2,您需要在 requestAction 中执行以下操作

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

    【讨论】:

    • 嗯。这没有任何改变,但我理解你的意思。我可以调用函数中的值,例如: $this->PlanDetail->id - 在 url 中给我当前关联的 id ...我只是想根据 PlanDetail.company_id 匹配为每个 PlanDetail 运行一个 foreach Company.id.. 我没想到这会这么棘手。
    • 你为什么在条件中声明AND,为什么需要定义与公司的关系?会在型号中声明吗?
    • 条件中user_id周围的数组声明也需要去掉
    【解决方案3】:

    在我看来你的代码应该只是

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

    假设您将 $this->PlanDetail->recursive 标志设置为 > 0,您的模型应该已经知道并返回任何“公司”表的关联数据.....

    我已经习惯了旧的 (1.3) 版本的 CakePHP,但是 find() 函数非常基本,并且被设计为只返回一行。

    是的,您肯定需要调用带有附加到 url 的 id 的函数,例如。

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

    【讨论】:

      猜你喜欢
      • 2022-08-13
      • 1970-01-01
      • 2011-04-11
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多