CakePHP: отправка нескольких флажков в базу данных

У меня есть флажок в форме Cakephp, который может иметь несколько значений. В представлении:

<?php // Multiple checkbox form echo $this->Form->input('report_types', array( 'type'=>'select', 'label'=>'Report Type(s)', 'multiple'=>'checkbox', 'options'=>array( 'option 1'=>'option 1', 'option 2'=>'option 2', 'option 3'=>'option 3', ), )); ?> 

Когда я загружаю это в базу данных, он возвращает «Столбец не найден: 1054 Неизвестный столбец« Массив »в поле« Список полей », потому что он пытается добавить массив, где он должен быть строкой.

Я попытался преобразовать любую из данных $this->request->data которая находится в форме массива, в строку, но это мешает назначению даты, которое у меня было ранее в форме (они также хранятся как массивы).

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

 <?php class Request extends AppModel { ... function beforeValidate() { if(!empty($this->request->data['Request']['attachment_types'])) { $this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']); } if(!empty($this->request->data['Request']['report_types'])) { $this->data['Request']['report_types'] = implode(',', $this->data['Request']['attachment_types']); } // Am I going to have to keep adding if-statements here? }?> 

Кроме того, метод !empty() Не работает, потому что поле никогда не будет пустым (из-за скрытого поля, автоматически создаваемого при вводе CakePHP).

Есть ли у кого-нибудь какие-либо идеи относительно того, как я могу подавать множественные флажки в базу данных? Это похоже на довольно скромный запрос … у CakePHP есть какие-то «автоматические» навыки в этом отношении?

Чтобы решить эту проблему, я изменил тип данных в массиве на набор с параметрами, определенными как ('option 1','option 2','option 3) в моей базе данных. Если в вашей базе данных нет «набора» данных, все в порядке. Затем я изменил мою beforeValidate() для сериализации данных.

 <?php class Request extends AppModel { ... function beforeValidate() { if($this->request->data['Request']['attachment_types']!=0) { $this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']); } if($this->request->data['Request']['report_types']!=0) { $this->data['Request']['report_types'] = implode(',', $this->data['Request']['report_types']); } // Yes, I will just have to keep adding if-statements :( }?> 

Обратите внимание, что в приведенном выше примере у меня было два поля с флажками ('report_types' и 'attachment_types'), которые объясняют, почему у меня было два if-оператора.

Спасибо JvO за помощь!