我正在使用 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`)
);
该应用程序正在一个一个地输入每个成员的详细信息,这很好 - 但我需要一个“添加结果”页面,该页面将列出数据库中的每个成员并允许输入一个数值该成员(member)获得的积分数。每次添加结果时,它们都是同一日期的,每个成员都会得到积分,即使积分为 0。
谁能指点一下如何显示符合上述规范的表单,以及如何同时存储多行?
提前致谢。
最佳答案
由于您是蛋糕新手...这里有一些提示。使用 pr($this->data)
在您的 Controller 中查看提交表单时您收到的确切数据。
像这样给你的输入字段命名约定 data[YourModel][field]
所以例如你会改变<input name="points[]" type="text" />
至 <input name="data[Result][points]" type="text" />
然后在 Controller 中它可以被访问
pr($this->data['Result']['points']);
保存到多个模型
您可能会发现从当前 Controller 访问这两个模型最简单,因此在您的 Controller 顶部添加此
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
条目,然后将其重新提交回数据库中的位置。
有点啰嗦,但应该可以让您入门。
关于php - 在 CakePHP 中一次存储多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8111951/