Почему это поле текста / заметок заполняется массивом при сохранении? CakePHP - PullRequest
2 голосов
/ 06 января 2011

Использование CakePHP 1.3.6

Я уверен, что мне, возможно, придется добавить код и примеры, но я начну с этого: у меня есть большая форма create (), основанная на родительской модели, которая "имеет много" из нескольких других моделей. которые имеют поля, созданные в форме.

Некоторые из «дочерних» моделей (которые также помечены как «принадлежащие» родителю) имеют поле «флажок» (tinyint 1, флажок) и поле «примечания» (текст, ввод текста).

Внутри одной из дочерних моделей, если я помещаю debug($this->data); в любой из пользовательских обратных вызовов проверки, я получаю это:

Array
(
    [Preapp120aItem] => Array
        (
            [checked] => 1
            [notes] => 1ere's some notes.
            [agent_id] => 1
        )

)

Где текстовая область содержит «вот некоторые заметки». и не"1ere's ...", как указано выше.

Кроме того, после выполнения saveAll() для родителя я получаю эту ошибку для рассматриваемой дочерней модели:

Notice (8): Array to string conversion [CORE/cake/libs/model/datasources/dbo_source.php, line 749]
Warning (512): SQL Error: 1054: Unknown column 'Array' in 'field list' [CORE/cake/libs/model/datasources/dbo_source.php, line 684]
Query: INSERT INTO `preapp120d_items` (`checked`, `notes`, `modified`, `created`) VALUES (1, Array, '2011-01-06 08:27:40', '2011-01-06 08:27:40') 

Где часть информации трассировки стека показывает это, о модели:

Preapp120dItem::$Preappform = Preappform object
$fields =   array(
    "checked",
    "notes",
    "modified",
    "created"
)
$values =   array(
    "1",
    array(
    "preappform_id" => "18"
),
"2011-01-06 08:27:40",
"2011-01-06 08:27:40"
)

Как или почему поле notes заполняется этим массивом?

Родительская модель называется 'preappform', и действительно, ее идентификатор равен 18 ... но ...?

Обновление 1:

По запросу, вот код из вида.

Переменная, используемая позже, помещается перед формой:

$default_notes_element_options = array(
    'type' => 'textarea',
    'rows' => '2', 
    'class' => 'text' 
);  

Форма создания:

<?php echo $form->create('Preappform', $default_form_create_options); ?>
<?php echo $form->input('Preappform.id', array('type'=>'hidden', 'value'=>$the_form['Preappform']['id'] )) ?>

поля Preapp120aItem

<td nowrap="nowrap"><?php echo $form->input('Preapp120aItem.checked', array('label'=>array('text' => 'Request this item', 'class' => 'checkbox-label'))) ?></td>
<td width="327">
    <?php echo $form->input('Preapp120aItem.notes', $default_notes_element_options); ?>
    <?php echo $form->input('Preapp120aItem.agent_id', array('type' => 'hidden', 'value' => '1' )); ?>
</td>

Обновление 2:

HTML в визуализации для модели Preapp120aItem.

<tr>
    <td>120A</td>
    <td nowrap="nowrap">
        <input type="hidden" name="data[Preapp120aItem][checked]" id="Preapp120aItemChecked_" value="0" />
        <input type="checkbox" name="data[Preapp120aItem][checked]" value="1" id="Preapp120aItemChecked" />
        <label for="Preapp120aItemChecked" class="checkbox-label">Check this box</label>
    </td>
    <td width="327">
        <textarea name="data[Preapp120aItem][notes]" rows="2" class="text" cols="30" id="Preapp120aItemNotes" ></textarea>
        <input type="hidden" name="data[Preapp120aItem][agent_id]" value="1" id="Preapp120aItemAgentId" />          
    </td>
</tr>

1 Ответ

0 голосов
/ 06 января 2011

Мой плохой

Возможно, я недостаточно четко дал понять, что Preappform была родительской моделью, а hasMany - дочерним Preapp120aItem.

Таким образом, в форме, несмотря на то, что я собираюсь сохранять только по одному, Представление должно было содержать следующее вместо аналогичного кода, найденного в оригиналевопрос:

<td nowrap="nowrap"><?php echo $form->input('Preapp120aItem.0.checked', array('label'=>array('text' => 'Request this item', 'class' => 'checkbox-label'))) ?></td>
<td width="327">
    <?php echo $form->input('Preapp120aItem.0.notes', $default_notes_element_options); ?>
    <?php echo $form->input('Preapp120aItem.0.agent_id', array('type' => 'hidden', 'value' => '1' )); ?>
</td>

Тонкой разницей является «0» (ноль) между названием модели и именем поля.Я знал, что делать это при сохранении нескольких связанных элементов, но не при сохранении одного.

Что касается того, как / почему Cake каким-то образом переписывал то, что получилось в $this->data модели с «1» для первого символа позиции: У меня нет вонючей идеи , и яне собираюсь выяснять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...