Как получить сохранение тегов, вроде бы система должна сохранять массив тегов, но почему то не сохраняет.
Моя реализация Модель tag.php
namespace app\models;
class Tag extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'tag';
}
...
public function attributeLabels()
{
return [
'id' => 'ID',
'name' => 'Наименование',
];
}
}
В моделе Zakaz.php
namespace app\models;
use Yii;
use yii\helpers\ArrayHelper;
use yii\db\ActiveRecord;
class Zakaz extends ActiveRecord
{
...
public $tags_array;
public static function tableName()
{
return 'zakaz';
}
public function rules()
{
return [
...
[['tags_array'], 'safe'],
...
];
}
public function attributeLabels()
{
return [
'id_zakaz' => '№',
...
'tags_array' => 'Тэги',
];
}
public function getZakazTag()
{
return $this->hasMany(ZakazTag::className(), ['zakaz_id' => 'id_zakaz']);
}
public function getTags()
{
return $this->hasMany(Tag::className(), ['id' => 'tag_id'])->via('zakazTag');
}
public function afterFind()
{
return $this->tags_array = $this->tags;
}
public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
$arr = ArrayHelper::map($this->tags, 'id', 'id');
foreach ($this->tags_array as $one){
if (!in_array($one, $arr)){
$model = new ZakazTag();
$model->zakaz_id = $this->id_zakaz;
$model->tag_id = $one;
$model->save();
}
}
}
}
ZakaTag.php
namespace app\models;
use Yii;
class ZakazTag extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'zakaz_tag';
}
public function rules()
{
return [
[['zakaz_id', 'tag_id'], 'required'],
[['zakaz_id', 'tag_id'], 'integer'],
];
}
public function attributeLabels()
{
return [
'id' => 'ID',
'zakaz_id' => 'Zakaz ID',
'tag_id' => 'Tag ID',
];
}
public function getTag()
{
return $this->hasOne(Tag::className(), ['id' => 'tag_id']);
}
}
В форме _form.php
<?= $form->field($model, 'tags_array')->widget(Select2::className(), [
'data' => ArrayHelper::map(Tag::find()->all(), 'id', 'name'),
'language' => 'ru',
'options' => ['placeholder' => 'Выберите тэг', 'multiple' => true],
'pluginOptions' => [
'allowClear' => true,
'tags' => true,
'maximumInputLength' => 10,
],
]);
?>
Где я делаю не правильно?
В post запросе Zakaz 'tags_array' => [
0 => '3'
1 => '1'
2 => '2'
]