Cakephp 由于我添加了与模型的关系,因此查询与auth冲突

Cakephp 由于我添加了与模型的关系,因此查询与auth冲突,cakephp,Cakephp,我有一个用户模型,它通过与公司模型的关系进行链接。 它工作得很好。问题是因为我添加了关系,当我想要记录日志时,查询会与公司建立一个查询 我不想在登录操作中使用公司模型 当我点击提交按钮时,我得到的是: 数据库错误 Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Company.user_id' in 'on clause' SQL Query: SELECT `User`.`id`, `User`.`username

我有一个用户模型,它通过与公司模型的关系进行链接。 它工作得很好。问题是因为我添加了关系,当我想要记录日志时,查询会与公司建立一个查询

我不想在登录操作中使用公司模型

当我点击提交按钮时,我得到的是:

数据库错误

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Company.user_id' in 'on clause'

SQL Query: SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`town_id`, `User`.`company_id`, `User`.`test_id`, `Company`.`id`, `Company`.`name` FROM `users` AS `User` LEFT JOIN `companies` AS `Company` ON (`Company`.`user_id` = `User`.`id`) WHERE `User`.`username` = 'CREAZ' AND `User`.`password` = '04fb76559109f9bbb69fc6805fccedb6a3b79982' ORDER BY `User`.`id` DESC LIMIT 1 
用户表中不存在company_id,它只适用于companys表,这就是它不起作用的原因

我是否需要更改appController中的身份验证部分,或者更改UsersController的操作登录中的某些内容

用户控制器(登录操作):

登录视图

<div class="page-header">
    <h1>Se connecter</h1>
</div>
<?php echo $this->Form->create('User'); ?>
    <?php echo $this->Form->input('username',array('label'=>"Login")); ?>
    <?php echo $this->Form->input('password',array('label'=>"Mot de passe")); ?>
<?php echo $this->Form->end('Se connecter'); ?>

Se连接器
AppController:

<?php
class AppController extends Controller{
    public $helpers = array('Text','Form','Html','Session','Cache');
    public $components = array('Session','Auth');

    function beforeFilter(){
        $this->Auth->loginAction = array('controller'=>'users','action'=>'login','admin'=>false);
        $this->Auth->authorize = array('Controller');

        if(!isset($this->request->params['prefix'])){
            $this->Auth->allow(); 
        }

        if(isset($this->request->params['prefix']) && $this->request->params['prefix'] == 'admin'){
            $this->layout = 'admin';
        }       
    }

    function isAuthorized($user){
        if(!isset($this->request->params['prefix'])){
            return true;
        }

        $roles = array(
            'admin' => 10,
            'user'  => 5
        ); 

        if(isset($roles[$this->request->params['prefix']])){
            $lvlAction = $roles[$this->request->params['prefix']];
            $lvlUser   = $roles[$user['role']]; 
            if($lvlUser >= $lvlAction){
                return true;
            }else{
                return false; 
            }
        }

        return false; 
    }
}

尝试将用户模型更改为使用$belongsTo,而不是$hasOne

public $belongsTo = array(
    'Company' => array(
        'className' => 'Company',
        'foreignKey' => 'company_id'
    );

你确信用户和公司之间的关系是完美的吗?这个错误看起来像是您没有在用户模型中正确实现关系,因为Cakephp试图使用错误的列名进行连接。您可以共享显示与公司关系的用户模型代码。感谢您的解释。是的,我是说,这对我的亲戚来说是有效的。这只是为了身份验证,我只需要CakePHP只使用表用户。我用用户和公司模型编辑了我的帖子。我修复了它,因为我必须在用户模型中添加'foreignKey'=>'id'。我在用户表中有公司id,在公司中有id,名称。
<?php 

class User extends AppModel{

    public $actsAs = array('Containable'); 

    public $hasOne = array(
        'Company' => array(
            'className' => 'Company',
            'dependent' => true
        )
    );

    public $recursive = -1; 

    public $order = 'User.id DESC';

    public $validate = array(

        'username' => array(

            'rule'       => 'isUnique',

            'allowEmpty' => false,

            'message'    => "Ce nom d'utilisateur est déja pris"

        ),

        'password' => array(

            'rule'       => 'notEmpty',

            'message'    => "Vous ne pouvez pas entrer de mot de pase"

        )

    );

    public function beforeSave($options = array()){

        if(!empty($this->data['User']['password'])){

            $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);

        }

        return true; 

    }

}
<?php 

class Company extends AppModel{

 public $hasMany = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'company_id',
        'dependent' => false
    ));

}

?>
public $belongsTo = array(
    'Company' => array(
        'className' => 'Company',
        'foreignKey' => 'company_id'
    );