CakePHP Auth检索额外数据

CakePHP Auth检索额外数据,php,cakephp,authentication,cakephp-1.2,Php,Cakephp,Authentication,Cakephp 1.2,我正在学习CakePHP,所以请原谅 我正在使用带有UsersController的CakePHP1.2.5Auth组件。用户模型包含两个表: class User extends AppModel { var $name = 'User'; var $belongsTo = 'Company'; } 调用login()时,我看到在SQL日志中检索数据(正在执行左连接),因此模型似乎是正确的,但Auth只存储来自users表的数据,并删除其他所有内容。我以后如何在不进行额外查询

我正在学习CakePHP,所以请原谅

我正在使用带有UsersController的CakePHP1.2.5Auth组件。用户模型包含两个表:

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

调用login()时,我看到在SQL日志中检索数据(正在执行左连接),因此模型似乎是正确的,但Auth只存储来自
users
表的数据,并删除其他所有内容。我以后如何在不进行额外查询的情况下检索公司数据?

在第819行的cake/libs/controller/components/auth.php中,应该是

$data = $model->find(array_merge($find, $conditions), null, null, 0);
试着把它改成

$data = $model->find(array_merge($find, $conditions), null, null, 1);
基本上将recursive设置为1
可能还需要在其他地方这样做。

或者,如果您不喜欢像我一样修改核心库,您也可以这样做

在您的
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')
访问公司详细信息。不要忘记添加
会话
组件和助手。

与更改核心相比,最好尝试可包含的行为:。页面底部附近有一个user/profile/example。

如果您写入
Auth.user.Company
会话密钥,可能会更方便。这将允许您使用AuthComponent包装器方法访问会话值:
$This->Auth->user('Company.field')对于数据库复杂的情况,这是一种很好的方法!例如,如果您有类似于
User HABTM Company(with=>CompaniesUser)
。对于OP的案例场景,在
$this->Auth->authenticate('Form'=>array('contain'=>array('Company',…))
中有一个简单的
contain
(当然安装了containable行为)。编辑:我知道答案是蛋糕1.2。我的建议是针对cake 2.x(这就是为什么它是评论而不是答案!)