@evgeniy_matveev

Почему не сохраняются данные в БД при использовании Select2?

Здравствуйте. Пытаюсь использовать в своём проекте виджет select2 от kartik-v.
Есть модель:
<?php
namespace app\models;
use yii\db\ActiveRecord;
use Yii;

class Delivery extends ActiveRecord{
    public static function tableName()
    {
        return 'delivery';
    }
    public function attributeLabels()
    {
        return [

            'id' => 'ID',
            'parent_id' => 'Parent ID',
            'materials_electric' => 'Список рассылки для материалов электрической части',
            'materials_mehanic' => 'Список рассылки для материалов механической части',
            'design_electric' => 'Список рассылки для проектирования электрической части',
            'design_mehanic' => 'Список рассылки для проектирование механической части',
            'installing_electric' => 'Список рассылки для монтажа электрической части',
            'installing_mehanic' => 'Список рассылки для монтажа механической части',
            'building' => 'Список рассылки для производства',


        ];
    }

    public function rules()
    {
        return [
            ['parent_id', 'required'],
            [['materials_electric','materials_mehanic','design_electric','design_mehanic','installing_electric','installing_mehanic','building'],'trim']

        ];
    }

   
    public function getProjects(){
        return $this->hasOne(Projects::className(),['id'=>'parent_id']);
    }

}


Для записи в БД использовал GII Ajax CRUD.

Хочу , чтобы в поля ввода записывалась строка, которую пользователь набирает с помощью виджета select2.
Виджет настроил так:
<?= $form->field($model, 'materials_electric')->widget(Select2::classname(), [
        'data' => $data,
        'options' => [
            'placeholder' => ' ',
            'multiple' => true
        ],
    ]) ?>

Проблема в том, что при использовании textInput() запись сохраняется в БД, а при использовании select2 нет. Формат данных в mysql - varchar(200) utf8_general_ci. Я новичок в web и со способами отладки не сильно знаком. В чем моя ошибка?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Я думаю у Вас там массив, следовательно перед сохранением (а возможно и перед валидацией) его надо привести к строке. Попробуйте добавить в модель:
public function beforeValidate() {
        if(is_array($this->materials_electric)){
                   $this->materials_electric = implode(",", $this->materials_electric);
        }
        return parent::beforeValidate();
    }

и уберите materials_electric из валидатора trim, я так понимаю для него нужен string. Хотя если речь о множественном выборе, то наверное стоит или в json преобразовывать или вообще иметь отдельную таблицу связанную для хранения выбранных вариантов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы