2012-02-05 96 views
1

我有两个MySQL表,科目和书籍,以及第三个表来定义这两者之间的许多一对多的关系:FuelPHP:添加多个许多一对多的关系

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软件包添加关系。 的关系是这样的一个数组(通过使用输入检索::后()):

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

对于有人用FuelPHP一些经验,这应该是很容易的,但我不能似乎弄明白...

在此先感谢帮助我!

+0

你阅读[文件](http://docs.fuelphp.com/packages/orm/relations/many_many.html)?你尝试过什么吗? – Furgas 2012-02-05 17:14:17

+0

是的,我尝试了很多东西,无法让它工作。另外,文档没有解释如何添加多个关系(本例中的书籍) – Jeroen 2012-02-05 18:57:59

+0

例如,我尝试将这一行添加到伪造参数数组中:''books'=> new Model_Book(Input :: post ('books')),'和这一个:''books'=> Input :: post('books'),' – Jeroen 2012-02-05 19:15:37

回答

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(); 
?> 
+0

除了第一个$ subject-> save()是不必要的,它完美的工作,谢谢! – Jeroen 2012-02-06 15:37:35