2009-04-02 10 views
1

Webページに入力された値に基づいて作成された列を使用して、データベースに動的にテーブルを作成できますか?フォームとして入力した値を列としてCakePHPでテーブルを動的に作成できますか?

実際には、ユーザーがフォームとテンプレートを作成したり、リンクをメールで送信して他のユーザーからデータを取得したり、データベースに保存したりできるアプリケーションを作成する必要があります。各ユーザーは、異なるフィールドを持つ異なるフォームを作成し、それを返信してデータを記入してフォームを送信する多数のユーザーに送信することができます。では、各フォームに異なるフィールドがあるので、どのようにデータを保存しますか?

答えて

3

テーブルをオンザフライで作成するのではなく、そのデータを静的テーブルでどのように表現できるかを確認する方がよいでしょう。

方法について:

  • など '修正' 'ID'、 'user_idの'、 '作成'、と 'フォーム' と呼ばれるテーブル
  • 'ID' と 'フィールド' と呼ばれるテーブル
  • 'id'、 'form_id'、 'field_id'、 'answer'などの「answers」というテーブル
  • 「フォーム」、「フォーム」、「タイプ」、「タイプ」、

このように、構造化SQLを大量に実行するのではなく、結合に頼っています。あなたの正気はあなたに感謝します。

+0

ありがとう、これは良いアイデアのようです。私はこのように実装しようとします。 – Angeline

+0

あなたがどんな壁にも当たったらどうなるか教えてください。 –

+0

エンティティ属性値と呼ばれるデータモデリング手法を参照してください。http://en.wikipedia.org/wiki/Entity-Attribute-Value_model – neilcrookes

1

はい、これを行うことができます。これはcakePHPに固有のものではありません。列を作成して削除するためのSQLコードを知り、そのSQLをquery()呼び出しに入れるだけです。

This pageはあなたの友人です。

これを行う必要があるかどうかは別の問題です。一般に、インストール時やアップグレード時にのみ、実行時にデータベースやテーブルの構造を変更するべきではありません。たとえば、達成する必要があるのは、ユーザープロファイルなどのカスタムフィールドを作成できるようにしている場合、実行時にテーブル構造を変更することは答えではありません。あなたが行うのは、すべてのカスタムフィールドを含む別のテーブルと、すべての値とフィールドIDおよびユーザーIDを含むテーブルです。それはこれを正規化する適切な方法でしょう。はい、1つではなく3つのテーブルが必要ですが、たとえば、user_customfield1、user_customfield2、user_customfield3という列を1つのテーブルにまとめて実行するよりも、実行時にその構造を変更するほうがはるかに優れています。

+0

ページが見つかりません。おそらく、あなたは正しいリンクを編集してポイントできますか? –

+1

固定リンク。彼らがページを動かしたように見えました。しかし、実行時にはこれをやってはいけないことを奨励しています。 – thomasrutter

関連する問題