2010-01-23 59 views
4

我剛學CakePHP的,所以原諒我CakePHP的驗證獲取額外的數據

我使用CakePHP 1.2.5驗證組件與UsersController。用戶模型包含兩個表:

class User extends AppModel { 
    var $name = 'User'; 
    var $belongsTo = 'Company'; 
} 

當用戶登錄()被調用時,我看到在SQL日誌檢索的數據(LEFT JOIN正在執行),因此模型似乎是正確的,但驗證只存儲數據從users表中刪除一切。我如何在不做額外查詢的情況下檢索公司數據?

回答

4

或者,如果你不舒服修改核心庫和我一樣,你也可以做......

UsersController.login行動

function login() { 
    if ($this->Auth->user()) { 
     $Session->write('Company', $this->User->Company->findById($this->Auth->user('id'))); 
     $this->redirect($this->Auth->redirect()); 
    } 

} 

您可以使用控制器上$this->Session->read('Company.name')訪問公司的詳細信息和$session->read('Company.name')在您的意見。不要忘記添加Session組件和幫手。

+3

如果你寫了'Auth.User.Company'會話密鑰,它可能會更方便。這將允許您使用AuthComponent包裝器方法來訪問會話值:'$ this-> Auth-> user('Company.field');' – deizel 2010-01-26 14:36:06

+0

對於數據庫非常複雜的情況而言,這是一個不錯的方法!例如,如果你有'User HABTM Company(with => CompaniesUser)''。對於OP的情況,在$ this-> Auth-> authenticate('Form'=> array('contains'=> array('Company',...')中有一個簡單的'contains' ..)))'。 [身份驗證文檔](https://book.cakephp.org/2.0/en/core-libraries/components/authentication.html)。 **編輯:**我意識到答案是爲蛋糕1.2。我的建議是爲蛋糕2.x(這就是爲什麼它的評論,而不是答案!) – Fr0zenFyr 2017-05-17 07:00:37

2
位於cake/lib /控制器/組件/上線819 auth.php

,它應該是

$data = $model->find(array_merge($find, $conditions), null, null, 0); 

嘗試將其更改爲

$data = $model->find(array_merge($find, $conditions), null, null, 1); 

基本設置遞歸到1 可能需要在其他一些地方也做這個。