このサイトで実装されているものと同様のタグ付けシステムを使用することを計画しています。
実際のタグ付けフロントエンドがあり、オートコンプリートなどが機能しています。
しかし、私はバックエンドでそれを処理するための最良の方法については混乱しています。
基本的に、バックエンドでタグを取得すると、次のような配列になります。
array(
array(
'value' => 1,
'label' => 'First Tag'
),
array(
'value' => 2,
'label' => 'Second Tag'
),
array(
'value' => 'Third Tag',
'label' => 'Third Tag'
),
array(
'value' => 3,
'label' => 'Fourth Tag'
),
)
タグ付けプラグインは、json_encode()
オートコンプリート時にajaxを介して同じ配列形式を受け取り、ラベルを表示し、IDを保存して返送できるようにします。
したがって、値1
が、2
の3
タグは、オートコンプリートから選択されたタグです。
の値を持つタグはThird Tag
、オートコンプリートから選択されていないタグであり、データベースに存在する場合と存在しない場合がありますが、手動で入力されています。
これで、ユーザーが実際に数字であるタグを作成できるという変更があります。
array(
'value' => 3,
'label' => 3
)
通過する可能性はありますが、まだ存在していないため、valueがintである場合、それはすでに存在していると単純に想定することはできません。
したがって、この質問の最初の部分は、タグが重複しないようにこれを管理するにはどうすればよいですか?
私の現在のアプローチは、タグ付けプラグインがオートコンプリートを介してタグを要求すると、次のような配列を送り返すことです。
(term ='ピン')
array(
array(
'value' => '||1',
'label' => 'pink'
),
array(
'value' => '||4',
'label' => 'pin cushion'
)
)
次に、バックエンドで、||で始まる値を持つタグを想定します。オートコンプリートから取得され、すでに存在しています。
次に、すべてのタグについてデータベースにクエリを実行し、残りのタグをチェックしてvalue
、配列のlabel
キーが存在するかどうかを確認します。存在する場合はそのままにし、作成しない場合は作成します。id
元の配列の新しい値に切り替えます。
しかし、それは私にはハッキーだと感じます。それは、フィラーアイテム(||
)を使用していることを意味します。それを行うには、よりエレガントな方法が必要ですか?
質問の次の部分は、実際にこれらのタグをアイテムにリンクすることです。これは、このサイトで質問を編集するという文脈に関連しています。
一部のタグはすでに質問にリンクされています。質問でタグ参照が重複しないように、どのように処理しますか?
これまでのところ、2つのオプションがあります。質問からタグへのすべてのリンクを削除してから、それらをすべて再度挿入します。(2クエリ)
または
、質問に接続されているすべてのタグについてデータベースにクエリを実行し、配列をループして、それらのタグを配列から削除します。残りを挿入します。(2クエリ)
どちらの方法も他の方法よりも優れていますか?または3番目のバージョンはありますか?