FuelPHP:添加多个多对多关系

Posted

技术标签:

【中文标题】FuelPHP:添加多个多对多关系【英文标题】:FuelPHP: Add multiple many-to-many relationships 【发布时间】:2012-02-05 16:55:26 【问题描述】:

我有两个 mysql 表,subjects 和 books,以及第三个表来定义这两者之间的多对多关系:

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

我还在 Subject 模型中添加了多对多关系:

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

检索具有分配书籍的主题可以正常工作(我已手动将一些记录添加到 books_subjects 表),但我不知道如何使用 ORM 包添加关系。 关系在这样的数组中(使用 Input::post() 检索):

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

对于对 FuelPHP 有一定经验的人来说,这应该很容易,但我似乎无法弄清楚...

提前感谢您帮助我!

【问题讨论】:

你读过the documentation吗?你有没有尝试过? 是的,我尝试了多种方法,但无法正常工作。此外,文档没有解释如何添加多个关系(在本例中为主题) 例如,我尝试将这一行添加到 forge 参数数组中:'books' =&gt; new Model_Book(Input::post('books')), 和这一行:'books' =&gt; Input::post('books'), 【参考方案1】:

试试

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

【讨论】:

除了第一个 $subject->save() 是不必要的之外,它工作得很好,谢谢!

以上是关于FuelPHP:添加多个多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

这是在fuelphp中与额外字段创建多对多关系的正确方法吗

hibernate 的 关联关系之多对多 和 延迟加载

如何在Laravel中的多对多关系中添加“别名”?

如何在 Django 中向多对多关系中添加字段?

Oracle Apex 20 多对多关系 - 添加记录

coreData为关系表添加其他属性的多对多关系