在CakePHP中一次存储多行

时间:2011-11-13 13:45:02

标签: php mysql cakephp cakephp-1.3

我正在开发CakePHP 1.3中的一个项目,该项目将存储一个成员集合 - 每个成员都有一个姓氏和姓氏 - 每个成员的多个结果将存储日期,对成员的引用以及点数

数据库结构如下所示。

CREATE TABLE `members` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `forename` varchar(255) NOT NULL,
  `surname` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `results` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `member_id` int(10) unsigned NOT NULL,
  `date` date NOT NULL,
  `points` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `member_id` (`member_id`)
);

该应用程序正在逐个输入每个成员的详细信息,这很好 - 但我需要一个“添加结果”页面,该页面将列出数据库中的每个成员并允许输入数值会员获得的积分数。每次添加结果时,它们都将在同一日期,并且每个成员将始终获得积分,即使它是0。

有人可以给我一个关于如何显示符合上述规范的表格以及如何同时存储多行的指针吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

因为你是新来的蛋糕......这里有一些提示。在控制器中使用pr($this->data)可以准确查看提交表单时收到的数据。

为您的输入字段命名约定,例如data[YourModel][field],例如,您可以将<input name="points[]" type="text" />更改为<input name="data[Result][points]" type="text" />,然后在控制器中可以通过

访问
 pr($this->data['Result']['points']);

保存多种型号

您可能会发现最容易从当前控制器访问这两个模型,因此在控制器的顶部添加此

class ResultsController extends AppController {   
 var $uses = array('Member', 'Result');

现在您可以将所需的任何数据保存到您想要的任何型号中。

$dataForResults = array();
$dataForResults['Result']['points'] = $this->data['Result']['points'];
$this->Result->save($dataForResults);

这不一定从数据库中检索记录,编辑它然后把它放回去,这将创建一个新的记录。

编辑一个更像的记录,

$dataByMemberId = $this->Result->findByMemberId($data['Result']['member_id']);
$dataByMemberId['Result']['points'] = $this->data['Result']['points'];
$this->Result->save($dataByMemberId);

将在Results表中获取该成员的当前记录,编辑points条目,然后将其重新提交回数据库中的位置。

有点啰嗦,但应该让你开始。