我有一个名为“packs”的db表(pack_id,pack_name,pack_description,pack_image)
我的packs.php模型:
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Packs extends ORM {
}
我的packs.php控制器:
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Packs extends Controller {
public function action_index($pack_name = null)
{
$view = new View('packs/index');
$this->response->body($view);
}
public function action_pack()
{
$pack_name = $this->request->param('id'); //get the packname from uri
$pack = ORM::factory('packs')->where('pack_name', $pack_name)->find();
print_r($pack);die;
$view = new View('packs/index');
$this->response->body($view);
}
} // End of file
致电www.mysite.com/packs/pack/aPackName,Kohana抛出此错误:
Database_Exception [1146]:表'packs_db.packses'不存在[从'packses'显示完整列]
我检查了我的database.php配置文件,一切正常。 为什么da hell是kohana在表名末尾添加“es”?我完全不解......
答案 0 :(得分:1)
您的模型应以单数名词Model_Pack
命名,即使您的表名为复数。这两条规则是Kohana ORM conventions的一部分。
p / s:该链接指向Kohana 2.x的约定,但它们仍然适用于3.x并进行了一些修改。
答案 1 :(得分:1)
似乎kohana试图“聪明”并猜测基于类名的表名是什么。
如果您将模型重命名为Model_Pack
它应该可以解决问题。其他解决方案是为您的模型table name。
答案 2 :(得分:1)
也有这个问题,我找到的解决方案之一是将set _table_names_plural变量限制为false。像这样:
class Model_Admin_Users extends ORM
{
public function __construct()
{
$this->_table_names_plural = false;
parent::__construct();
}
}