Kohana ORM - 表名不正确

时间:2012-11-29 14:25:01

标签: php kohana kohana-3 kohana-orm kohana-3.2

我对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')
     );
  ...

任何人都知道这里有什么问题吗? 非常感谢任何帮助!

2 个答案:

答案 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()
  );
  //...