我对Kohana(3.2)ORM查询构建器有一个奇怪的问题,我无法弄清楚出了什么问题。我得到“不正确的表名”异常:
Database_Exception [ 1103 ]: Incorrect table name '' [ SELECT ``.* FROM `` JOIN `user_plugins` ON (`user_plugins`.`plugin_id` = ``.`id`) WHERE `user_plugins`.`user_id` = '9' ]
如您所见,查询中的表格为空。
控制器:
$user = ORM::factory('user', Auth::instance()->get_user()->id);
if ($user->loaded() )
{
$result = $user->plugin->find_all();
}
用户模型:
class Model_User extends Useradmin_Model_User
{
protected $_has_many = array(
'plugin' => array( 'through' => 'user_plugins'),
);
...
user_plugin模型
class Model_user_plugin extends ORM
{
protected $_belongs_to = array(
'plugin' => array(),
'user' => array()
);
...
插件模型
class Model_Plugin extends ORM
{
protected $_has_many = array(
'user' => array('through' => 'user_plugins')
);
...
任何人都知道这里有什么问题吗? 非常感谢任何帮助!
答案 0 :(得分:3)
这就是用户模型应该是
的方式class Model_User extends Useradmin_Model_User
{
protected $_has_many = array(
'plugin' => array('model' => 'plugin', 'through' => 'user_plugins'),
);
...
这就是插件模型应该是
的方式class Model_Plugin extends ORM
{
protected $_has_many = array(
'user' => array('model' => 'user', 'through' => 'user_plugins')
);
您根本不需要user_plugin模型,两个模型中的“user_plugins”都是指表名,而不是模型名。只需确保您的表格中包含具有以下字段的user_plugins,
id,user_id,plugin_id
我希望这会有所帮助。
答案 1 :(得分:1)
按照惯例,$_has_many
必须始终使用复数名称,除非您在目标模型中的$_object_name
中指定名称。所以它应该是:
class Model_Plugin extends ORM
{
protected $_has_many = array(
'users' => array('through' => 'users_plugins')
);
//...
class Model_User extends ORM
{
protected $_has_many = array(
'plugins' => array('through' => 'users_plugins')
);
//...
class Model_user_plugin extends ORM
{
protected $_belongs_to = array(
'plugin' => array(),
'user' => array()
);
//...