yii2 和 select2 标签

yii2 and select2 for tags

我正在使用这样的 kartik select2 小部件:

echo Select2::widget([
        'model' => $model,
        'attribute' => 'script_tags',
        'data' => $model->tagList,
        'options' => ['multiple' => true,'placeholder' => 'Select states ...'],
        'pluginOptions' => [
            'tags' => true
        ],
    ]);

$model->tagList 是这种格式的数组 ['id'=>'name'] 从数据库中填充。

我的问题是将其保存到数据库中的最佳原因是什么 table 因为使用自定义标签我对 script_tags 的响应是这样的

[0=>'1', 1=>'5', 2=>'math'],

我需要在 table tag[fields=id, name] 中保存新标签,并在 table tagmap[fields=id, script_id, tag_id]

中保存所有标签的关系

我应该检查 tagmap 中是否是整数保存关系,如果是字符串,则在标签 table 中保存第一个新标签,然后在 tagmap

中保存关系

您的方法看起来不错,除非有人明确输入数字作为标记值。假设在您的标签 table 中,ID 1'foo',ID 5'bar'。无法判断您是 'foo,bar,math' 还是 'foo,5,math'。您可以检查这些 ID 是否确实存在于您的数据库中并采取相应措施,但这可能有点过头了。

不过,我建议您看看一些已经存在的标记解决方案。我对 2amigos/yii2-taggable-behavior, but there's also creocoder/yii2-taggable 和其他很多人都很满意。

作为一个额外的好处,2amigos taggable 还存储标签频率。

请记住,在 tagmap 中有一个 id 列,我敢打赌这是一个自动增量 PK,这是不好的做法,您应该使用 (script_id, tag_id) 作为复合 PK。