Php 数据库异常[1146]:表';数据库。角色';不';不存在[显示“角色”中的完整列]

Php 数据库异常[1146]:表';数据库。角色';不';不存在[显示“角色”中的完整列],php,mysql,kohana,kohana-orm,Php,Mysql,Kohana,Kohana Orm,我目前正在设置一个新项目并创建我的登录系统。出于某种原因,它似乎正在搜索角色表?这是我目前的结构: 控制器 public function action_index() { //Check login if ( Auth::instance()->logged_in() ): HTTP::redirect('/', 302); endif; if ( Request::current()->post() ): if(

我目前正在设置一个新项目并创建我的登录系统。出于某种原因,它似乎正在搜索角色表?这是我目前的结构:

控制器

public function action_index()
{
    //Check login
    if ( Auth::instance()->logged_in() ):
        HTTP::redirect('/', 302);
    endif;

    if ( Request::current()->post() ):
        if( Auth::instance()->login( $_POST['username'], $_POST['password'] ) ):
            echo Debug::vars($_POST); exit;
        endif;
    endif;

    $view = View::factory('index/home');

    $index_page = $view->render();  
    $this->response->body($index_page);         
}
模型

我得到的错误是

Database_Exception [ 1146 ]: Table 'database.roles' doesn't exist [ SHOW FULL COLUMNS FROM `roles` ]
有人能解释一下为什么它要找一个名为roles的表吗?数据库中的表称为用户。

正如您在中所看到的,
模型验证用户
具有以下关系:

"roles" => array(2) (
   "model" => string(4) "Role"
   "through" => string(11) "roles_users"
)
这就是错误的来源(当您扩展所述类时)

在ORM的模块文件夹中,您可以找到用于默认身份验证的SQL模式:

modules/ORM/auth-schema-mysql.sql


我现在已经从该文件中删除了与角色相关的任何内容,但仍然会收到相同的错误?为什么?Kohana的默认值被认为是非常好的,所以阻止这个错误的唯一方法是创建它所需要的表?当然不是。你可以改变
extend
,如果你的类是你的,或者完全覆盖(我不是说你很苛刻,但是你失败了)与角色相关的部分bh:我不知道
Auth
中是否还有其他需要角色的部分,但是我不明白为什么你不应该马上实现它们,这是一个较低的错误。任何身份验证模块都必须依赖于某些数据库存储,rdb作为mysql或nosql作为redis。您最好阅读模块api和说明。
"roles" => array(2) (
   "model" => string(4) "Role"
   "through" => string(11) "roles_users"
)
CREATE TABLE IF NOT EXISTS `roles` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `description` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uniq_name` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

INSERT INTO `roles` (`id`, `name`, `description`) VALUES(1, 'login', 'Login privileges, granted after account confirmation');
INSERT INTO `roles` (`id`, `name`, `description`) VALUES(2, 'admin', 'Administrative user, has access to everything.');

CREATE TABLE IF NOT EXISTS `roles_users` (
  `user_id` int(10) UNSIGNED NOT NULL,
  `role_id` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY  (`user_id`,`role_id`),
  KEY `fk_role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `email` varchar(254) NOT NULL,
  `username` varchar(32) NOT NULL DEFAULT '',
  `password` varchar(64) NOT NULL,
  `logins` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `last_login` int(10) UNSIGNED,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uniq_username` (`username`),
  UNIQUE KEY `uniq_email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `user_tokens` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` int(11) UNSIGNED NOT NULL,
  `user_agent` varchar(40) NOT NULL,
  `token` varchar(40) NOT NULL,
  `created` int(10) UNSIGNED NOT NULL,
  `expires` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uniq_token` (`token`),
  KEY `fk_user_id` (`user_id`),
  KEY `expires` (`expires`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

ALTER TABLE `roles_users`
  ADD CONSTRAINT `roles_users_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `roles_users_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE;

ALTER TABLE `user_tokens`
  ADD CONSTRAINT `user_tokens_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;