3

我有一个非标准的数据库设置可以使用,我试图让这个测试用例在 Kohana 3.2 中工作,但没有任何运气。设想:

  • 我有一个使用数据库 A 的课程模型
  • 我有一个使用数据库 B 的成员模型
  • 我在数据库 A 中有一个 courses_members 连接表

课程模型

class Model_Course extends ORM {

// Select the DB
protected $_db_group = 'default';

// override primary key
protected $_primary_key = 'courseid';

// Relationship
protected $_has_many = array(
    'members' => array(
        'model'   => 'member',
        'foreign_key' => 'memberID',
        'through' => 'courses_members',
    ),
);

}

会员模型

class Model_Member extends ORM {

// Select the DB
protected $_db_group = 'alternate';

// override primary key
protected $_primary_key = 'memberID';

// Relationship
protected $_has_many = array(
    'courses' => array(
      'model'   => 'course',
      'foreign_key' => 'courseid',
      'through' => 'courses_members'
    ),
);

}

现在在我的控制器中尝试我试图回显一些测试数据

$courses = ORM::factory('course')->find_all();

foreach ($courses as $course) 
{
  echo $course->coursename . '<br/>';

  foreach ($course->members as $member) 
  {
    echo '-' . $member->username . '<br/>';
  }

  echo '<hr/>';

}

但是 $member->username 会产生一个空对象。空的物体让我难过。

想法?Kohana ORM 可以跨多个数据库以这种方式工作吗?

4

2 回答 2

1

这可以使用Kohana 的 LEAP ORM轻松完成。在 LEAP 中,您所要做的就是在模型中指定要使用的数据源(即数据库配置组),并且 ORM 将处理数据库之间的切换,因为它利用了数据库连接池。Leap 还允许您在数据库方言之间切换,因为该模块具有 DB2、Firebird、MariaDB、MS SQL、MySQL、Oracle、PostgreSQL 和 SQLite 的驱动程序。您可以在https://github.com/spadefoot/kohana-orm-leap从 github 下载 LEAP ORM 。

于 2011-12-18T00:07:33.927 回答
0

答案有点晚了,但这是解决方案。改变

foreach ($course->members as $member) 
{
    echo '-' . $member->username . '<br/>';
}

为了:

foreach ($course->members->find_all() as $member) 
{
    echo '-' . $member->username . '<br/>';
}
于 2012-07-20T17:58:44.653 回答