这是我的控制器
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` ]"
需要一些帮助来解决这个问题。
答案 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个字符)