Database_Exception [1146]:表'kohana.userdetailses'不存在

时间:2013-08-21 09:51:47

标签: php kohana

这是我的控制器

userdetails.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Userdetails extends Controller {

    public function action_index() {
        $view = new View('userdetails/index');
        $this->response->body($view);
    }
     public function action_add() {
        $userdetails = new Model_Userdetails();         
        $view = new View('userdetails/adddetails');
        $view->set("userdetails", $userdetails);         
        $this->response->body($view);
    }

模型是

userdetails.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Userdetails extends ORM {

}

userinfo.sql

CREATE TABLE `kohana`.`userinfo` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `first_name` varchar(100) DEFAULT NULL,
  `last_name` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`id`)
);

我正在学习php和kohana。我正在使用kohana 3.2版本。我正在关注this tutorial来创建,编辑,更新和删除数据库中的数据。我尝试使用上面的代码,我收到此错误< / p>

"Database_Exception [ 1146 ]: Table 'kohana.userdetailses' doesn't exist [ SHOW FULL COLUMNS FROM `userdetailses` ]"   

需要一些帮助来解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果未设置$_table_name,Kohana会猜测表名。它在模型描述单个对象的大部分时间内将模型名称复数化,并且该表描述了很多模型名称。

修改

我看到你实际上将你的表userinfo和模型userdetails命名为。如果这是你想要的:

class Model_Userdetails {

    protected $_table_name = 'userinfo';

    ........
}

或者将模型重命名为Model_Userinfo,或将表格重命名为userdetails并且:

--- END EDIT ---

在你的情况下,它似乎最适合:

class Model_Userdetails {

    protected $_table_name = 'userdetails';

    ........
}

当然,您也可以将您的班级重命名为Model_Userdetail,以便将表名称猜为userdetails

<强>更新

尽管Kohana 也应猜测这些(即SHOW FULL COLUMNS FOR table或sth),但可能会解决property not found错误,如下所述评论。

protected $_table_columns = array(
    'id'        => array('type' => 'int'),
    'firstname' => array('type' => 'string'),
    ....... // repeat for all columns
);

更新

您的PHP代码中存在拼写错误:deScription。无论如何,定义表列是一个好习惯,因为每次初始化模型时,这将为您节省额外的查询。除了一些可以从数组中获取参数的验证内容(例如类型description的{​​{1}}或多或少不受长度限制,但可能想要限制它说2000个字符)