2

JSONを使用するのは初めてです。これはおそらくすでにここで質問されていることはわかっていますが、正しいことをしている場合は相談したいだけです。

さまざまなページの動的フォームを作成する必要があります。ページごとに動的フォームを追加できるようにする必要があります。管理パネルから、ページテンプレートのフィールドを追加/編集/削除できます-フィールドの順序、名前、タイプ、値などを変更します。

そこで、私が行ったことは、動的フォームフィールドをjsonに保存し、各ページに入力されたデータについては、jsonにも保存しました。以下は、私のデータベースに保存されているサンプルJSONデータです。

2つのフィールドを持つ動的フォームのJSON構造:

{
"0":{
  "id":"511ddf15cb8ae_1", // generated using uniqid() and counter, to generate a unique id for each field
  "name":"Page Name #1",
  "type":"textfield",
  "validation":"email", 
  "require":"on",
  "value":""  //default value
},
"1":{
  "id":"511ddf15cb8ae_2",
  "name":"Field Name #2",
  "type":"checkbox",
  "validation":"none",
  "require":"on",
  "value":["item 1","item 2","item 3"]  //selection
}
}

入力された値の保存されたJSON:

{
"511ddf15cb8ae_1":   //the field id, used as key to be able to directly access the data
  "test new data",
"511ddf15cb8ae_2":
  ["item 1","item 2"]
}

私の主な質問は、jsonを使用して入力された値をデータベースに保存するか、入力された値を個別に保存する必要があるかということです--dbtablerow。

これをより良い方法で行うためのアイデアはありますか、それともこれはすでに問題ありませんか?ありがとう。

乾杯

4

2 に答える 2

0

次に何を計画するかによります:)。

後でフォームを再構築し、入力した値を入力するだけの場合(動的フォームも保存していると思います)、再構築する必要がないという意味で、これまでのアプローチは非常に優れています。複雑なクエリを使用して、入力された値からjsonに戻ります。

ただし、後でそれぞれのフィールドに入力された値について複雑な調査結果やクエリを実行すると、「特定のユーザーが特定のフィールドに特定の値を入力した回数」などの面倒な作業になります。すこし。そうすることを計画している場合は、リレーショナルアプローチを使用して、テーブルに保存することをお勧めします。動的フォームと入力された値。

于 2013-02-18T16:01:55.233 に答える
0

SQLデータベースに文字列として保存することは問題ありません。いつでも可能ですがstringifyparse特にJOIN操作を実行したり、複雑な構造を永続的に表現したりする場合は、これは非常に面倒です。すでにJSONに含まれているので、 MongoDBのようなNoSQL永続ストレージメカニズムを使用して、JSON自体を保存してみませんか。

MongoDBを使用すると、JSONドキュメントをBSON形式で保存し、それらに対してクエリを実行できます。これは、現在の実装にはない機能です。

実際、次のようなものを使用して、WebサイトでインタラクティブなMongoDBシェルを開き、そこからデータベースのプロトタイプを作成できます。

> var page = {"name":"Page Name #1",   "type":"textfield",   "validation":"email",    "require":"on",   "value":"aValue"};
{
 "name" : "Page Name #1",
 "type" : "textfield",
 "validation" : "email",
 "require" : "on",
 "value" : "aValue"
 }
> db.pages.save(page);
"ok"

そこから、すべてのページが追加されると、堅牢なクエリを実行できるようになります。たとえば、テキストフィールドタイプのすべてのページが検索されます。

db.pages.find({"type":"textfield"});

値フィールドを使用して、はるかに複雑で強力なクエリを実行することもできますが、それはあなたに任せます。

于 2013-02-18T16:03:34.960 に答える