如何使用递归模型创建 cakephp 表单

Posted

技术标签:

【中文标题】如何使用递归模型创建 cakephp 表单【英文标题】:How to create cakephp form with recursive models 【发布时间】:2011-08-25 22:07:42 【问题描述】:

我正在尝试创建一个使用 HABTM 关系的表单。连接表的字段是另一个表的外键。我需要在这些字段之一中输入数据。有可能吗?

示例。

model1 (id, field1, field2) 模型 2(ID,字段 1,字段 2) model3 (id, field1, field2)

joinmodel(连接model1和model2但属于model3的外键。

该表单将包含来自 model1 和 model1 的字段,没有问题,但 joinmodel->model1(field1) 的字段让我很着迷。

我不确定这是否完全清楚我要完成的工作。如果这没有意义,我将发布我的真实模型数据。

【问题讨论】:

【参考方案1】:

我相信这是可以做到的,在声明表单元素时,您可以执行以下操作:

echo $this->Form->input('Model1');
echo $this->Form->input('Model2');
echo $this->Form->input('Model3');
echo $this->Form->input('field');

然后在控制器中你会做$this->Model1->saveAll($this->data);

More info

另一种方法是保存模型数据,假设 Model2 具有模型 1 和 3 的外键,然后您首先保存模型 1 和 3,将 ID 分配给 Model2 中的正确字段,然后保存模型 2。当然都在控制器中。

【讨论】:

【参考方案2】:

如果你有相关的表格并且你想输入表格,那么你可以输入这样的内容。

$this->Form->input('Model1.0.field1');
$this->Form->input('Model1.0.field2');
$this->Form->input('Model2.0.field1');
$this->Form->input('Model2.0.field2');

如果你是第二排,你可以给

$this->Form->input('Model1.1.field1');
$this->Form->input('Model1.1.field2');
$this->Form->input('Model2.1.field1');
$this->Form->input('Model2.0.field2');

等等……

最后,您可以通过使用一次性保存所有数据

$this->Model->saveAll($this->data);

Model 是您在哪个视图中创建表单的主要模型。 这也将应用所有模型验证。

在控制器中保存时,您可以使用

$this->Model1->saveAll($this->data);

【讨论】:

以上是关于如何使用递归模型创建 cakephp 表单的主要内容,如果未能解决你的问题,请参考以下文章

cakephp 如何使用一个日期和时间间隔创建和保存表单

CakePHP,将模型的递归设置为-1,这样它就不会“加入”?

CakePHP - 如何在保存时将关联记录添加到模型中?

CakePHP 2.4 中同一模型的多个编辑表单

Cakephp:选择登录后要保存的数据

如何在模型中保存 cakephp 对象