Kohana 3.2 ORM - связанные модели в нескольких базах данных? - PullRequest
3 голосов
/ 20 октября 2011

У меня нестандартная настройка базы данных для работы, и я пытаюсь заставить этот тестовый пример работать в Kohana 3.2, но безуспешно. Сценарий:

  • У меня есть модель курсов с использованием базы данных A
  • У меня есть модель членов, использующая базу данных B
  • У меня есть таблица соединений courses_members в базе данных A

модель для курсов

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 работать таким образом в нескольких базах данных?

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Это можно легко сделать, используя LEAP ORM для Kohana . В LEAP все, что вам нужно сделать, это указать в ваших моделях источник данных (то есть группу конфигурации базы данных), который вы хотите использовать, и ORM будет обрабатывать переключение между базами данных, поскольку использует пул соединений с базами данных. Скачок также позволит вам переключаться между диалектами базы данных, поскольку модуль имеет драйверы для DB2, Firebird, MariaDB, MS SQL, MySQL, Oracle, PostgreSQL и SQLite. Вы можете скачать LEAP ORM с github на https://github.com/spadefoot/kohana-orm-leap.

0 голосов
/ 20 июля 2012

Уже немного поздно для ответа, но вот решение.Изменить

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

На:

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