2010-09-13 72 views
1

我一直使用此代碼戰鬥:CakePHP的返回空但SQL查詢有結果

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

在任何模型的afterFind方法中您有任何東西嗎? AppModel還是當前模型? – 2010-09-13 16:36:32

回答

0

想必這個方法是在models/contract.php中定義的?

recursive = 0聲明看起來有點懷疑我。這些模型是否在各自的模型文件中正確相關?

您是否嘗試過loadModel以防萬一關聯無法正常工作?

從各個模型中查看關係定義將很有用。

- 編輯 - 我從您的評論在這裏格式化代碼,我不能編輯您的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, 
        ) 
       ); 
+0

變量$屬於關聯=陣列( \t '狀態'=>數組( \t \t '的className'=> '狀態', \t \t 'FOREIGNKEY'=> 'STATUS_ID', \t \t '條件'=> '' , \t \t '字段'=> '', \t \t '順序'=> '' \t) \t '用戶'=>數組( \t \t '的className'=> '用戶', \t \t 'FOREIGNKEY'=> 'USER_ID', \t \t '條件'=> '', \t \t '字段'=> '', \t \t '順序'=> '' \t) ); 變量$的hasMany =陣列( \t '交易'=>數組( \t \t '的className'=> '交易', \t \t 'FOREIGNKEY'=> 'contract_id', \t \t '依賴'=>假, \t \t '條件'=> '', \t \t '字段'=> '', \t \t '順序'=> '', \t \t '限制'=> '', \t \t '' 偏移> '', \t \t '獨家'=> '', \t \t 'finderQuery'=> '', \t \t 'counterQuery'=> '' \t) ); – RaScoop 2010-09-13 16:57:41

+0

感謝您的及時回覆。該方法確實在模型中的contract.php中。將遞歸更改爲2也沒有幫助。最讓我感到困擾的是Cake正在從服務器請求正確的SQL結果。但它仍然返回空結果集。 – RaScoop 2010-09-13 16:59:44

+0

我猜,這段代碼在Contract模型中。狀態模型是什麼樣的? – Leo 2010-09-13 17:33:31

1

的問題是有存根做一些後期處理一個afterFind。問題是我完全忘記了返回$ results; 我通過逐步調試model.php中的查找方法來發現錯誤。發現後發現被調用了一些點,並去檢查我的afterFind。 花了我約4小時的一個簡單的錯誤,但我正在學習!