@AlexAll

Как записать данные с одного контроллера в разные таблицы в yii2?

Привет, есть две таблицы
post[id, title, text]
site[id, title, link, post_id]

При создание поста есть два поля для добавления сайта, с текстом и ссылкой которые выводятся с помощью расширения https://github.com/unclead/yii2-multiple-input

в модели Post.php создаю переменную public $site и валидацию проверки что это массив

[['site'], 'exist', 'allowArray' => true],


во вьшке _form делаю поле

<?= $form->field($model, 'site')->widget(MultipleInput::className(), [
    
    'columns' => [
        [
            'name'  => 'title',
            'title' => 'Название сайта',
            'enableError' => true,
        ],
        
        [
            'name'  => 'link',
            'title' => 'Ссылка',
            'enableError' => true,
        ]
    ]
 ]);
?>


в контролере

public function actionCreate()
    {
        $model = new Offers();
         if ($model->load(Yii::$app->request->post())) {
             if($model->save()) {
                foreach ($model->site as $var){
                $site = new Site();    
                $site->title = $var->title;
                $site->link = $var->link;
                $site>post_id = $model->id;
                $site->save();                
                
                }
               
             }
             
                    return $this->redirect(['view', 'id' => $model->id]);
                          
        }
        
        return $this->render('create', [
            'model' => $model,

        ]);
    }


Пытаюсь записать выдает ошибку на этом месте if($model->save()) {

Database Exception – yii\db\Exception
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[[]]) FROM `post` WHERE `post`.`site`=NULL' at line 1
The SQL being executed was: SELECT COUNT(DISTINCT [[]]) FROM `post` WHERE `post`.`site`=NULL

Error Info: Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[[]]) FROM `post` WHERE `post`.`site`=NULL' at line 1
)


Что не так?
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
chelkaz
@chelkaz
Попробуйте так:
$model->save(false);
Вместо if($model->save())
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы