在CakePHP的"子"模型中保存信息

时间:2020-03-06 14:30:17  来源:igfitidea点击:

我有一个简单的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。我不知道这部分。 :)