0

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

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

4

2 回答 2

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

我希望这有帮助。

于 2012-12-01T10:57:34.767 回答
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()
  );
  //...
于 2012-12-01T11:04:48.213 回答