我一直在与这段代码作斗争:
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代码正在运行,但我可以弄清楚改变了什么!
答案 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,
)
);