Как сохранить данные для раскрывающегося списка в приложении для создания форм в CakePHP? - PullRequest
0 голосов
/ 22 июня 2009

Я использую CakePHP и MySQL для своего приложения

У меня есть три таблицы:

  • Формы (идентификатор, имя, созданный, измененный)
  • Атрибуты (id, form_id, метка, тип, sequenceno)
  • Результаты (id, form_id, attribute_id, метка, значение, submit_by)

Приложение, которое я разрабатываю, похоже на Form Builder. Генерация полей на основе типа (например, если type = "text" -> генерировать текстовое поле)

Теперь у меня есть сомнения относительно того, что мой тип - «Dropdown», тогда у него будет выпадающий список с некоторыми параметрами Как я могу сохранить эти выбор имени? Например:

<select id="jselect">
 <option id="choice1">Male</option>
 <option id="choice2">Female</option>
</select>

Пример записи в таблице будет таким же, как в таблице атрибутов

       1 1 name text 1
       2 1 age number 2
       3 1 address Textarea 3

А в моей таблице результатов

       1 1 1 name aruna 
       2 1 2 age 22
       3 1 3 address XYZ

то есть, как я могу сохранить выбор мужчин и женщин в таблице? Так как у меня будет привилегия изменить имя выбора даже между ними.

Ответы [ 2 ]

0 голосов
/ 22 июня 2009

Если я правильно понимаю, вы хотите сохранить возможные ответы для атрибутов выпадающего типа? Тогда у вас есть два подхода:

  • Отдельная таблица, содержащая идентификатор родительского атрибута и возможное значение (по одному на строку)
  • Поле в таблице атрибутов, содержащее возможные ответы в виде пар метка / значение. В этом случае вы можете сохранить в столбце TEXT ассоциативный массив serialize() 'd PHP, содержащий value => label. В PHP легче поддерживать и использовать (unserialize поле для его использования, изменить его, один UPDATE для изменения), но вы не сможете правильно указать это значение в запросе SQL.

Редактировать: пример решения # 2

Добавьте поле answers типа TEXT в таблицу Attributes. Затем запустите этот код PHP:

// obtain this array programatically:
$genders = array(
    ''     =>    'Unknown',
    'M'    =>    'Male',
    'F'    =>    'Female',
);
// put this into the 'answers' field instead of displaying it
echo serialize( $genders );

Это даст вам запись атрибута, подобную этой (которая объясняет, почему это едва ли способно выполнять запросы):

   4 1 gender dropdown 4 a:3:{s:0:"";s:7:"Unknown";s:1:"M";s:4:"Male";s:1:"F";s:6:"Female";}

затем в вашем PHP-коде, просто:

$genders = unserialize( $my_attribute_row['answers'] );
// here you have your array back
0 голосов
/ 22 июня 2009

Вы пробовали использовать enum?

Тип ENUM

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