Могу ли я динамически создавать таблицы в CakePHP, используя значения, введенные в форму в качестве столбцов? - PullRequest
1 голос
/ 02 апреля 2009

Можно ли динамически создавать таблицы в базе данных с помощью столбцов, созданных на основе значений, введенных на веб-странице?

На самом деле мне нужно создать приложение, которое пользователи могут использовать для создания форм и шаблонов, получать данные от других по электронной почте и сохранять их в базе данных. Каждый пользователь может создать отдельную форму с различными полями и отправить ее нескольким людям, которые в свою очередь заполняют данные и отправляют формы. Итак, как мне хранить данные, поскольку каждая форма имеет разные поля?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2009

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

Как насчет:

  • таблица, называемая «формы» с «id», «user_id», «созданный», «измененный» и т. Д.
  • таблица с именем 'fields' с 'id', 'form_id', 'type', 'label', 'required', 'properties' и т. Д.
  • таблица, называемая «ответы» с «id», «form_id», «field_id», «answer» и т. Д.

Таким образом, вы полагаетесь на объединения, а не на выполнение тонны структурного SQL. Ваше здравомыслие поблагодарит вас.

1 голос
/ 02 апреля 2009

Да, вы можете сделать это. Это не относится к cakePHP: вам просто нужно знать код SQL для создания столбцов и их удаления, и поместить этот SQL в вызов query ().

Эта страница ваш друг.

Должны ли вы заниматься этим, это другой вопрос; как правило, вы не должны изменять базу данных или структуру таблицы во время выполнения - только во время установки или обновления. Например, если вам нужно разрешить создание пользовательских полей для профиля пользователя или что-то в этом роде, то изменение структуры таблицы во время выполнения не является решением. Что бы вы сделали, у вас есть отдельная таблица, содержащая все настраиваемые поля, и таблица, содержащая все значения вместе с идентификатором поля и идентификатором пользователя. Это был бы правильный способ нормализовать это; да, он включает в себя три таблицы вместо одной, но это лучше, чем, например, столбцы user_customfield1, user_customfield2, user_customfield3, все в одной таблице, и изменять эту структуру во время выполнения.

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