我想迭代和编辑edit.ctp
中数据透视表中的数据。
显示和编辑一个实体可以与下面的代码(如果至少有一个条目)配合使用:
edit.ctp
echo $this->Form->control('winkels.0._joinData.winkel_id', [
'options' => $winkels,
'label' => 'Winkel',
'type' => 'select'
]);
echo $this->Form->control('winkels.0._joinData.url');
echo $this->Form->control('winkels.0._joinData.prijs');
我可以获取数组的深度并更改winkels
的索引,但这很脏……我什至不确定那是否可行。
所以我尝试了下面的代码,但是没有创建正确的HTML:
if(!empty($product->winkels)) {
foreach ($product->winkels as $winkel) {
echo $this->Form->control($winkel->_joinData->winkel_id, [
'options' => $winkels,
'label' => 'Winkel',
'type' => 'select'
]);
echo $this->Form->control($winkel->_joinData->url, [
'label' => 'URL',
'value' => $winkel->_joinData->url
]);
echo $this->Form->control($winkel->_joinData->prijs, [
'label' => 'Prijs',
'value' => $winkel->_joinData->prijs
]);
}
}
是否有一种干净的方法可以为数据透视表生成这些控件?另外,如果$product->winkels
为空,如何进行第一项输入?
其他信息:
--- 编辑 ---
我已经调整了代码,但似乎无法创建“数据透视表”
if(!empty($product->winkels)) {
foreach ($product->winkels as $index => $winkel) {
echo $this->Form->control('winkels.$index.winkel_id');
echo $this->Form->control('winkels.$index._joinData.winkel_id', [
'options' => $winkels,
'label' => 'Winkel',
'type' => 'select'
]);
echo $this->Form->control('winkels.$index.url', [
'value' => $winkel->_joinData->url]
);
echo $this->Form->control('winkels.$index.prijs', [
'value' => $winkel->_joinData->prijs]
);
}
} else {
echo $this->Form->control('winkels.0.winkel_id');
echo $this->Form->control('winkels.0._joinData.winkel_id', [
'options' => $winkels,
'label' => 'Winkel',
'type' => 'select'
]);
echo $this->Form->control('winkels.0._joinData.url');
echo $this->Form->control('winkels.0._joinData.prijs');
}
如您在调试结果中看到的,很多结构丢失了:
答案 0 :(得分:1)
使用数组的索引没有什么脏的,实际上就是您的使用方式,例如:
foreach ($product->winkels as $index => $winkel) {
echo $this->Form->control("winkels.$index.id");
echo $this->Form->control("winkels.$index._joinData.winkel_id", [/* ... */]);
echo $this->Form->control("winkels.$index._joinData.url", [/* ... */]);
echo $this->Form->control("winkels.$index._joinData.prijs", [/* ... */]);
}
如果要更新现有记录,请不要忘记主键!请注意,您不需要提供值,表单帮助程序将根据给定的字段名称查找值本身。
如果winkels
为空,则只需从索引0
开始,就像第一个示例一样。
另请参见