Создать элементы управления для сводной таблицы

Я хотел бы перебирать и редактировать данные из сводной таблицы в 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

Решение

Нет ничего грязного в использовании индекса массива, это именно то, как вы это сделаете, то есть что-то вроде:

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так же, как в вашем первом примере.

Смотрите также

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]