Задать вопрос
littlefishily
@littlefishily

Как записать данные в промежуточную таблицу Yii2?

Здравствуйте! Не получается записать данные в промежуточную таблицу.
Схема бд:
5e53da6cd45c8759159956.png

В форму добавления записи (area) добавил чекбокcлист, который выводит список рабочих с таблицы workers:
<?= $form->field($model, 'workAreas')->checkboxList(ArrayHelper::map(Workers::find()->all(), 'id', 'name')) ?>


В AreaController.php:
public function actionCreate()
    {
        $model = new Area();
        $workarea = new WorkArea();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            
            $workarea->area_id = $model->id;
            $workarea->worker_id = $model->workAreas;
            
          //$workarea->save();

            var_dump($workarea);

            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }


В модели Area.php:
public function getWorkAreas()
    {
        return $this->hasMany(WorkArea::className(), ['area_id' => 'id']);
    }


Данные с формы уходят все и все они правильные:
5e53deb9085bb567936479.png
var_dump($workarea) показывает нужный area_id, а вот массив worker_id почему-то пуст. Попробовал отдельно var_dump($model->workAreas), массив также пуст. Если в контроллере подставляю $workarea->worker_id = 7(или любое другое), то запись в бд происходит правильно.

На данном этапе, не могу понять почему так происходит( Помогите, пожалуйста, разобраться почему не видно данных в массиве. А также как правильно сохранить массив? Чтоб промежуточная таблица выглядела так:
5e53e2f167e13510052558.png
  • Вопрос задан
  • 406 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
@KingstonKMS
В модели Area есть свойство и rules для workAreas? Как они из post загружаются в модель?
В rules workAreas должен быть safe, тогда массив загрузится и будет доступен. И ещё, его надо переводить в строку, чтобы сохранить в базу. worker_id должен быть соответствующего типа.
Ответ написан
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Так сохранять в Yii нельзя. https://www.yiiframework.com/doc/guide/2.0/ru/db-a...

Так же есть хорошее расширение "la-haute-societe/yii2-save-relations-behavior"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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