Cakephp返回空,但sql查询有结果

时间:2010-09-13 16:22:26

标签: php cakephp cakephp-1.3 models

我一直在与这段代码作斗争:

function getNextActionFObyBalance($when) {

  $theQuery = $this->find('first', array(
   'fields' => array(
     'Contract.id',
     'Contract.start_balance'
    ),
    'conditions' => array(
    'AND' => array(
      'Status.next_action_by' => 'frontoffice',
      'Status.status_type' => 'active',
      'Status.visibility' => 'frontoffice',
      'OR' => array(
        'Contract.next_action_on' => null,
    'Contract.next_action_on <=' => $when
      )
    )),
    'order' => 'Contract.start_balance DESC',
    'recursive' => 0,
  ));
  return $theQuery;
}

我已启用MySQL服务器上的日志记录,这是服务器指示CakePHP正在请求的内容:

SELECT `Contract`.`id`, `Contract`.`start_balance` FROM `contracts` AS `Contract` LEFT JOIN `statuses` AS `Status` ON (`Contract`.`status_id` = `Status`.`id`) LEFT JOIN `users` AS `User` ON (`Contract`.`user_id` = `User`.`id`)  WHERE ((`Status`.`next_action_by` = 'frontoffice') AND (`Status`.`status_type` = 'active') AND (`Status`.`visibility` = 'frontoffice') AND (((`Contract`.`next_action_on` IS NULL) OR (`Contract`.`next_action_on` <= '2010-09-13 10:13:04'))))   ORDER BY `Contract`.`start_balance` DESC  LIMIT 1

如果我在phpmyadmin工具中使用它,我会得到我期望的两个字段的1条记录。 但是 CakePHP只给了我一个空的结果集。 谁能开导我?

PS代码正在运行,但我可以弄清楚改变了什么!

2 个答案:

答案 0 :(得分:1)

问题在于,在查找后,存根需要进行一些后期处理。问题是我完全忘记了返回结果; 我通过逐步调试model.php中的find方法找到了错误。发现在某个时刻被调用后发现并去检查我的afterFind。 我花了大约4个小时来处理一个简单的错误,但我正在学习!

答案 1 :(得分:0)

大概这个方法是在models / contract.php中定义的。

recursive = 0语句对我来说有点怀疑。模型在各自的模型文件中是否正确相关?

如果关联无法正常工作,您是否尝试过loadModel

从各个模型中查看关系定义会很有用。

- EDIT-- 我已将您评论中的代码格式化,因为我无法编辑您的OP

var $belongsTo = array(
    'Status' => array( 
        'className' => 'Status', 
        'foreignKey' => 'status_id', 
                     ), 
    'User' => array( 
        'className' => 'User', 
        'foreignKey' => 'user_id', 
                     )
                 ); 

var $hasMany = array( 
    'Transaction' => array( 
        'className' => 'Transaction', 
        'foreignKey' => 'contract_id', 
        'dependent' => false, 
                      )
                 );