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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

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

Сообщение alexa777 »

Привет, есть две таблицы
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
)

Что не так?
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

Вам перевести?

Вообще, странный Вы программист. Одну проблему не решил
https://yiiframework.ru/forum/viewtopic ... 19&t=48736

На основе ее получает вторую... Разберитесь, мол, за меня...

Так код не пишут.
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

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

Сообщение alexa777 »

Loveorigami писал(а): 2018.10.10, 09:27 Вам перевести?

Вообще, странный Вы программист. Одну проблему не решил
https://yiiframework.ru/forum/viewtopic ... 19&t=48736

На основе ее получает вторую... Разберитесь, мол, за меня...

Так код не пишут.
я не программист а только учусь, перевод мне нечего не дает, эта проблема таже, просто тут я все развернуто написал
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

Это не та же проблема. Это следствие первой.
Если Вы в этом не видите разницы - ничем Вам помочь не могу.

Учитесь? Вы прочитали какие-то книги, прошли курсы?
Не представляю, чтобы, например, стоматолог так учился: "О, я Вам не тот зуб вырвал... Ну а я только учусь..."
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

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

Сообщение andku83 »

alexa777 писал(а): 2018.10.10, 09:21 При создание поста есть два поля для добавления сайта, с текстом и ссылкой которые выводятся с помощью расширения https://github.com/unclead/yii2-multiple-input
По приведенной вами ссылке есть wiki, загляните почитайте примеры использования.
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

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

Сообщение alexa777 »

Loveorigami писал(а): 2018.10.10, 13:33 Это не та же проблема. Это следствие первой.
Если Вы в этом не видите разницы - ничем Вам помочь не могу.

Учитесь? Вы прочитали какие-то книги, прошли курсы?
Не представляю, чтобы, например, стоматолог так учился: "О, я Вам не тот зуб вырвал... Ну а я только учусь..."
Это пост я создавал не для того чтобы обсуждать мои знания и навыки.
Чем доказывать мне какой Вы умный, а я дурак, показали бы что я не так делаю, и как сделать правильно. А то ваши намеки мне не дано понять, нечего внятного Вы мне и не сказали ни тут ни в другой теме. Не хотите помочь и показать, тогда и писать какой Вы умный не надо, я рад за вас что Вы родились программистом.
Форум создан чтобы помогать тем кто что то не понимает.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

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

Сообщение andku83 »

alexa777 писал(а): 2018.10.10, 14:30 Это пост я создавал не для того чтобы обсуждать мои знания и навыки.
...
Форум создан чтобы помогать тем кто что то не понимает.
Вам говорили немного о другом.
Как минимум ненормально видеть на первой странице этой ветки столько тем об одной проблеме:
https://yiiframework.ru/forum/viewtopic ... 19&t=48730
https://yiiframework.ru/forum/viewtopic ... 19&t=48735
https://yiiframework.ru/forum/viewtopic ... 19&t=48734
https://yiiframework.ru/forum/viewtopic ... 19&t=48736
https://yiiframework.ru/forum/viewtopic ... 19&t=48743 - текущая тема

Есть общепринятые правила создания тем: не дублировать темы, и сначала попробовать поискать информацию прежде чем задавать вопрос.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

alexa777 писал(а): 2018.10.10, 14:30 Это пост я создавал не для того чтобы обсуждать мои знания и навыки.
Чем доказывать мне какой Вы умный, а я дурак...
От того, что я за вас сделаю, а Вы скопипастите, ума не прибавится. И через неделю, с этим же вопросом будете создавать новую тему.
Я вам дал намек, в какую сторону нужно копать, т.к. считал, что Вам по силам самому разобраться. И если б Вы разобрались - Вы бы запомнили это на всю жизнь. Попутно изучив тему полностью.

Это тоже самое, что пытаться прочитать книгу, зная гласные буквы...
alexa777 писал(а): 2018.10.10, 14:30 Форум создан чтобы помогать тем кто что то не понимает.
Вот именно. А не для того, чтобы решать Ваши косяки.

Ок. Допустим, я начинающий

Получаю ошибку
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
Перевожу. Ошибка синтаксиса возле '[[]]) . Смотрю - оперfтор DISTINCT.
Ищу в гугле
http://2sql.ru/novosti/sql-distinct/

Читаю
Оператор SQL DISTINCT имеет следующий синтаксис:
SELECT DISTINCT column_name FROM table_name
В моем запросе - вместо column_name - [[]]

Значит, что то не так.
А что не так - непровалидированные данные из предыдущей темы.

Что такое валидация

Идем искать в гугл
https://yiico.ru/blog/541-pravila-valid ... orm-v-yii2

Рассмотрим пример проверки на валидность формы:

Код: Выделить всё

// объявляем экземпляр класса
$model = new \app\models\ContactForm;
// модель заполненная пользовательскими данными
$model->attributes = \Yii::$app->request->post('ContactForm');
if ($model->validate()) {
// все данные корректны
} else {
// данные не корректны: $errors - массив содержащий сообщения об ошибках
$errors = $model->errors;
}
Пример взят из официальной документации, он осуществляет проверку массива, полученного POST запросом из формы.
-----------------------------

Ага, значит есть документация - ищем в гугле (хотя она на главной сайта https://yiiframework.ru/)

https://www.yiiframework.com/doc/guide/2.0/ru

Читаем содержание - видим https://www.yiiframework.com/doc/guide/ ... tart-forms

Там же

Код: Выделить всё

Создание действия
Далее создайте действие entry в контроллере site, точно так же, как вы делали это ранее.

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\EntryForm;

class SiteController extends Controller
{
    // ...существующий код...

    public function actionEntry()
    {
        $model = new EntryForm();

        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            // данные в $model удачно проверены

            // делаем что-то полезное с $model ...
 
            return $this->render('entry-confirm', ['model' => $model]);
        } else {
            // либо страница отображается первый раз, либо есть ошибка в данных
            return $this->render('entry', ['model' => $model]);
        }
    }
}

=================

Вот это все Вы должны были проверить и написать, перед тем, как задавать вопрос... Что делал то-то то-то, читал там-то, там-то...

А не создавать кучу тем по одной и той же ошибке (это я и имел ввиду).

Складывается впечатление, что Вы и не учитесь, а ждете, пока за Вас кто-то что то напишет.
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

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

Сообщение alexa777 »

Loveorigami писал(а): 2018.10.10, 15:47
alexa777 писал(а): 2018.10.10, 14:30 Это пост я создавал не для того чтобы обсуждать мои знания и навыки.
Чем доказывать мне какой Вы умный, а я дурак...
От того, что я за вас сделаю, а Вы скопипастите, ума не прибавится. И через неделю, с этим же вопросом будете создавать новую тему.
Я вам дал намек, в какую сторону нужно копать, т.к. считал, что Вам по силам самому разобраться. И если б Вы разобрались - Вы бы запомнили это на всю жизнь. Попутно изучив тему полностью.

Это тоже самое, что пытаться прочитать книгу, зная гласные буквы...
alexa777 писал(а): 2018.10.10, 14:30 Форум создан чтобы помогать тем кто что то не понимает.
Вот именно. А не для того, чтобы решать Ваши косяки.

Ок. Допустим, я начинающий

Получаю ошибку
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
Перевожу. Ошибка синтаксиса возле '[[]]) . Смотрю - оперfтор DISTINCT.
Ищу в гугле
http://2sql.ru/novosti/sql-distinct/

Читаю
Оператор SQL DISTINCT имеет следующий синтаксис:
SELECT DISTINCT column_name FROM table_name
В моем запросе - вместо column_name - [[]]

Значит, что то не так.
А что не так - непровалидированные данные из предыдущей темы.

Что такое валидация

Идем искать в гугл
https://yiico.ru/blog/541-pravila-valid ... orm-v-yii2

Рассмотрим пример проверки на валидность формы:

Код: Выделить всё

// объявляем экземпляр класса
$model = new \app\models\ContactForm;
// модель заполненная пользовательскими данными
$model->attributes = \Yii::$app->request->post('ContactForm');
if ($model->validate()) {
// все данные корректны
} else {
// данные не корректны: $errors - массив содержащий сообщения об ошибках
$errors = $model->errors;
}
Пример взят из официальной документации, он осуществляет проверку массива, полученного POST запросом из формы.
-----------------------------

Ага, значит есть документация - ищем в гугле (хотя она на главной сайта https://yiiframework.ru/)

https://www.yiiframework.com/doc/guide/2.0/ru

Читаем содержание - видим https://www.yiiframework.com/doc/guide/ ... tart-forms

Там же

Код: Выделить всё

Создание действия
Далее создайте действие entry в контроллере site, точно так же, как вы делали это ранее.

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\EntryForm;

class SiteController extends Controller
{
    // ...существующий код...

    public function actionEntry()
    {
        $model = new EntryForm();

        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            // данные в $model удачно проверены

            // делаем что-то полезное с $model ...
 
            return $this->render('entry-confirm', ['model' => $model]);
        } else {
            // либо страница отображается первый раз, либо есть ошибка в данных
            return $this->render('entry', ['model' => $model]);
        }
    }
}

=================

Вот это все Вы должны были проверить и написать, перед тем, как задавать вопрос... Что делал то-то то-то, читал там-то, там-то...

А не создавать кучу тем по одной и той же ошибке (это я и имел ввиду).

Складывается впечатление, что Вы и не учитесь, а ждете, пока за Вас кто-то что то напишет.
Спасибо за подсказки буду читать ;)
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

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

Сообщение alexa777 »

Loveorigami писал(а): 2018.10.10, 15:47
Поставил я валидатор, теперь не на 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
)
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

естественно. Подумайте, каким образом в Ваш запрос вместо названия колонки попадает [[]]. Я ж на это указал.
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

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

Сообщение alexa777 »

Loveorigami писал(а): 2018.10.10, 21:40 естественно. Подумайте, каким образом в Ваш запрос вместо названия колонки попадает [[]]. Я ж на это указал.
Потому что это массив и он должен записываться в другую таблицу?
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

Я не знаю, куда и что Вы хотите записать. Пока что я читаю ошибку.
Вникайте.

SELECT COUNT(DISTINCT [[]]) FROM `post` WHERE `post`.`site`=NULL - это не INSERT.

До записи еще дело не дошло.
Помимо этой ошибки внизу на странице еще куча информации, включая файл и строку, в которой произошел данный вызов с ошибкой.

Либо валидация, либо связи либо еще что-то, известное только Вам формирует этот запрос и пытается его выполнить.

+ Вам же дали совет. Раз Вы используете виджет MultipleInput, так изучите его. Посмотрите на примеры.

Я уже вижу отличия что там https://github.com/unclead/yii2-multipl ... Action.php

и что у Вас.

Сразу скажу - что скопипастить и вставить не получится. Не заработает.
Вначале добейтесь у себя, чтобы заработали примеры из этого виджета. Тогда Вы поймете, как он работает. А потом добрая половина вопросов отпадет сама собой.
Ответить