在CakePHP的"子"模型中保存信息
我有一个简单的CakePHP site(1.2)
。我有一个页面,我们可以在其中编辑和保存一个人。所以我有一个Person模型和控制器。
每个人在评论表中都没有或者没有更多评论。因此,我有一个Comment模型,并且我的Person模型与Comment模型之间具有hasMany关联。视图很棒。
我的问题是,在"查看人员"页面上,我有一个"添加评论"按钮。这应该如何工作?我应该期望Person控制器为评论记录添加一个保存,还是创建一个comment控制器并保存在某个人的关联之外?
我对PHP有经验,但是对Cake来说是全新的。
有任何想法吗?我想我只是缺少明显的东西,但是我不确定该怎么做。我觉得如果是PHP,我会在我的添加注释表单中引用Person_id,从而使用一个单独的控制器,但是我觉得拥有一个用于简单Model的控制器是没有用的,因为注释仅在人员记录。
有想法吗?
解决方案
我不是CakePHP专家,但我仍然认为拥有自己的控制器会很有意义。从我做过的其中一篇CakePHP博客教程的记忆中,我们需要将评论和评论模型中的帖子链接起来。这是我从中得到的一些代码:
class Comment extends AppModel { var $name = ‘Comment’; var $belongsTo = array(‘Person’); }
然后,我们需要一个控制器(comments_controller.php):
class CommentsController extends AppController { var $name = ‘Comments’; var $scaffold; }
一些SQL:
CREATE TABLE comments ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, author VARCHAR(50), comment TEXT, person_id INT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL );
$ scaffold`为我们创建一个CRUD应用程序,因此,当我们在浏览器中转到/ comments时,可以创建,阅读,更新和删除注释。因此,正如我们所看到的,这里没有太多涉及。我们只需要数据库表和提供person_id的逻辑即可。
要保存评论(在"人" /视图中):
<h2>Add comment</h2> <?php echo $form->create(‘Comment’, array(‘action’=>‘add/’.$person[‘Person’][‘id’]); echo $form->input(‘author’); echo $form->input(‘content’); echo $form->submit(‘Add comment’); echo $form->end(); ?>
在CommentsController中:
function add($id = NULL) { if (!empty($this->data)) { $this->data['Comment']['person_id'] = $id; $this->data['Comment']['id'] = ''; if ($this->Comment->save($this->data)) { $this->Session->setFlash('Commented added'); $this->redirect($this->referer()); } } }
因此,我们基本上覆盖了Cake自己添加的标准添加操作。希望现在有意义。另外,我们可能需要一条路线,以便它选择/ comments / add / ID。我不知道这部分。 :)