1

2つのMySQLテーブル、サブジェクトとブック、およびこれら2つの間の多対多の関係を定義するための3番目のテーブルがあります。

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の経験がある人にとっては、これはかなり簡単なはずですが、私はそれを理解できないようです...

私を助けてくれてありがとう!

4

1 に答える 1

2

試す

<?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();
?>
于 2012-02-06T08:26:19.403 に答える