Kohana 3.2 ORM - 跨多个数据库的相关模型?

时间:2011-10-20 17:34:58

标签: orm kohana kohana-3 kohana-orm

我有一个非标准的数据库设置可以使用,我试图让这个测试用例在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-&gt; username会产生一个空对象。空物会让我伤心。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

有关:

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