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'
);