- Moon.Wong
- 评论(0)
在多对多关系中保存相关模型数据
跟简单的关系一样,在多对多关系中保存相关数据也是非常容易的,我们接下来会修改之前的代码,添加新功能,让用户在保存图书信息的同时保存图书的多 个作者的信息。
动手时间:保存相关模型数据
1,在Books控制器(文件位置:/app/controllers/books_controller.php)中添加一个新操作add()
<?php
class BooksController extends AppController {
var $name = 'Books';
var $helpers = array( 'Form' );
function index() {
$this->Book->recursive = 1;
$books = $this->Book->find('all');
$this->set('books', $books);
}
function add() {
if (!empty($this->data)) {
$this->Book->create();
$this->Book->save($this->data);
$this->redirect(array('action'=>'index'), null, true);
}
$authors = $this->Book->Author->generateList();
$this->set('authors', $authors);
}
}
?>
2,为/books/add/操作创建一个带有信息录入表单的视图(/app/views/books/add.ctp)
<?php echo $form->create('Book');?>
<fieldset>
<legend>Add New Book</legend>
<?php
echo $form->input('isbn');
echo $form->input('title');
echo $form->input('description');
echo $form->input('Author');
?>
</fieldset>
3,使用浏览器访问下列地址,并添加图书信息。
http://localhost/relationship/books/add
怎么回事?
Author模型的generateList() 函数是用来获取所有作者列表的。在这个表单中,我们也创建了一个选择列表以接受所有相关作者名字——我们可以从这个列表中选取多个作者。
这段代码$form->input('Author')具体负责自动生成选择列表,在表单助手(form helper)的input方法中,相关的模型名称Author是作为参数提供的。它告诉该方法使用$authors数组来创建多选列表。
当表单提交时,Book模型的Save函数在获取图书信息的同时也会获取所有相关作者的信息。Save函数首先保存图书的信息,然后在联接表中创建 记录以构建该图书和多个作者之间的对应关系。