如何使用递归模型创建 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 表单的主要内容,如果未能解决你的问题,请参考以下文章