0

这是我的控制器

用户详细信息.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);
    }

模型是

用户详细信息.php

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

class Model_Userdetails extends ORM {

}

用户信息.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 版本。我正在按照本教程创建、编辑、更新和删除数据库中的数据。我尝试使用上面的代码,我收到了这个错误

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

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

4

1 回答 1

1

$_table_name如果未设置,Kohana 会猜测表名。它将模型名称复数,因为大多数时候模型描述单个对象,而表格描述了很多对象。

编辑

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

class Model_Userdetails {

    protected $_table_name = 'userinfo';

    ........
}

或者将模型重命名为Model_Userinfo,或将表重命名为userdetailsand:

---结束编辑---

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

class Model_Userdetails {

    protected $_table_name = 'userdetails';

    ........
}

当然,您也可以将您的类重命名为,Model_Userdetail以便将表名猜测为userdetails

更新

即使 Kohana也应该猜到这些(即SHOW FULL COLUMNS FOR table或某事),这可能会解决property not found下面评论中讨论的错误。

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

更新:

您的 PHP 代码中有一个错字:deScription. 无论如何,定义表列是一个好习惯,因为这将在每次第一次初始化模型时为您节省额外的查询。连同一些可以从数组中获取参数的验证内容(例如description,类型TEXT的长度或多或少不受限制,但可能希望将其限制为 2000 个字符)

于 2013-08-21T09:55:25.470 回答