FuelPHP: добавление нескольких отношений «многие ко многим» - PullRequest
1 голос
/ 05 февраля 2012

У меня есть две таблицы MySQL, предметы и книги, а также третья таблица для определения отношений «многие ко многим» между этими двумя:

CREATE TABLE IF NOT EXISTS `books` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `isbn13` char(13) NOT NULL,
  `isbn10` char(10) NOT NULL,
  `author` varchar(255) NOT NULL,
  `language` varchar(100) NOT NULL,
  `edition` smallint(6) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `books_subjects` (
  `subject_id` int(11) NOT NULL,
  `book_id` int(11) NOT NULL,
  PRIMARY KEY  (`subject_id`,`book_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `subjects` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `institution_id` mediumint(9) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

Чтобы добавить новую тему, я использую пакет ORM:

<?php    
$subject = Model_Subject::forge(array(
    'name' => Input::post('name'),
    'institution_id' => Input::post('institution_id'),
));

$subject->save();
?>

Я также добавил отношение «многие ко многим» к модели «Тема»:

protected static $_many_many = array('books');

Получение предметов с помощью назначенных им книг работает нормально (я добавил несколько записей втаблица books_subjects вручную), но я не знаю, как добавить отношения с помощью пакета ORM.Отношения находятся в массиве, подобном этому (полученному с помощью Input :: post ()):

  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "3"
  }

Для кого-то, кто имеет некоторый опыт работы с FuelPHP, это должно быть довольно легко, но я просто не могу понять этоout ...

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 06 февраля 2012

Попробуйте

<?php    
$subject = Model_Subject::forge(array(
    'name' => Input::post('name'),
    'institution_id' => Input::post('institution_id'),
));

$subject->save();

foreach (Input::post('books') as $book_id) {
    $subject->books[] = Model_Book::find($book_id);
}

$subject->save();
?>
...