生成数据透视表的控件

时间:2019-01-07 21:00:42

标签: php controls pivot-table cakephp-3.0

我想迭代和编辑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为空,如何进行第一项输入?

其他信息:

screenshot

--- 编辑 ---

我已经调整了代码,但似乎无法创建“数据透视表”

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');
}

如您在调试结果中看到的,很多结构丢失了:

debug

1 个答案:

答案 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开始,就像第一个示例一样。

另请参见