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。
我正在使用这样的 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。