2013-12-08 1 views
0

В настоящее время я создаю новый проект и создаю свою систему входа. По какой-то причине, похоже, он ищет таблицу ролей? Это моя структура до сих пор:Database_Exception [1146]: Таблица «database.roles» не существует [SHOW FULL COLUMNS FROM `role`]

Контроллер

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

Модель

class Model_User extends Model_Auth_User { 

protected $_table_name = "users"; 
protected $_primary_val = "user_id"; 

protected $_table_columns = array(
'user_id'  => array('type' => 'int'), 
'team_id'  => array('type' => 'int'), 
'username'  => array('type' => 'string'), 
'password'  => array('type' => 'string'), 
); 

И ошибка я получаю

Database_Exception [ 1146 ]: Table 'database.roles' doesn't exist [ SHOW FULL COLUMNS FROM `roles` ] 

Может кто-нибудь объяснить, почему он ищет таблица называется ролями? Таблица в базе данных называется пользователями.

+0

, что нижняя ошибка. Любой модуль auth должен зависеть от некоторого хранилища базы данных, rdb как mysql или nosql как redis. Вам лучше прочитать модуль api и описание. – fayhot

ответ

2

Как вы можете видеть в API browser, Model_Auth_User имеет следующие has_many отношений:

"roles" => array(2) (
    "model" => string(4) "Role" 
    "through" => string(11) "roles_users" 
) 

Это где ошибка происходит из (как вы расширяете указанный класс).

В папке модуля ORM в вы найдете схему SQL, используемую для проверки подлинности по умолчанию:

модулей/ORM/аутентификация-схема-mysql.sql

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; 
+0

Теперь я удалил все, что связано с ролями из этих файлов, но все равно получаю ту же ошибку? – joshuahornby10

+0

Почему? По умолчанию в Kohana довольно хорошо продумано – kero

+0

Итак, единственный способ остановить эту ошибку - создать таблицы, в которых она нуждается? – joshuahornby10