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 はデータベース接続プールを利用するため、データベース間の切り替えを処理します。モジュールには DB2、Firebird、MariaDB、MS SQL、MySQL、Oracle、PostgreSQL、および SQLite 用のドライバーがあるため、Leap ではデータベースの方言を切り替えることもできます。LEAP ORM は、 https://github.com/spadefoot/kohana-orm-leapの github からダウンロードできます。

于 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 に答える