Как форме присвоить значение

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Как форме присвоить значение

Сообщение Gyry »

Добрый день,возникла небольшая проблема. Имеется обычная форма заполнения в бд, мне нужно, что бы в поле id_specialization(красн), автоматичести присвоить переменную $num->id(синяя, там приходит число) ну и всё.
Изображение: https://ibb.co/jME48R
Пробовал вписать:

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

<?php $model->id_specialization = $num->id;?>
но это не сработало
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Как форме присвоить значение

Сообщение caHek2x »

что обозначает "не сработало" ?
что у вас находится в $num->id ?
и что у вас возвращается в Doctror:getSpe.... ?
skvarovski
Сообщения: 92
Зарегистрирован: 2015.06.15, 18:36

Re: Как форме присвоить значение

Сообщение skvarovski »

вам наверное требуется назначить значение по умолчанию?
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Re: Как форме присвоить значение

Сообщение Gyry »

caHek2x писал(а): 2017.11.20, 15:10 что обозначает "не сработало" ?
что у вас находится в $num->id ?
и что у вас возвращается в Doctror:getSpe.... ?
в $num->id находится число(в данном случае 7)
в данном случает параметр Doctror:getSpe.. выбирает сам пользователь(в нём находится список), Мне нужно, что бы в данный объект записывался то число, которое я укажу в коде. Соответственно пользователь не увидит это поля вообще
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Re: Как форме присвоить значение

Сообщение Gyry »

Не сработало, то есть в базу данный ни чего не занеслось, как будто я и не указывал ни чего
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Re: Как форме присвоить значение

Сообщение Gyry »

skvarovski писал(а): 2017.11.20, 15:15 вам наверное требуется назначить значение по умолчанию?
Ну можно и так сказать, туда записывается id из другой таблицы(id у меня приходит, тут всё ок)
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Как форме присвоить значение

Сообщение caHek2x »

Gyry писал(а): 2017.11.20, 15:18
caHek2x писал(а): 2017.11.20, 15:10 что обозначает "не сработало" ?
что у вас находится в $num->id ?
и что у вас возвращается в Doctror:getSpe.... ?
в $num->id находится число(в данном случае 7)
в данном случает параметр Doctror:getSpe.. выбирает сам пользователь(в нём находится список), Мне нужно, что бы в данный объект записывался то число, которое я укажу в коде. Соответственно пользователь не увидит это поля вообще
я спросил не к тому ...
параметр Doctror:getSpe.. выбирает сам пользователь
я имел ввиду покажите что возвращает эта ф-ция ... может у вас там нет значения с ключом 7 ...
Не сработало, то есть в базу данный ни чего не занеслось, как будто я и не указывал ни чего
а база то тут причем .. вы проверьте в дебаге для начала что с формы приходит ...
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Как форме присвоить значение

Сообщение Dominus »

Если я правильно понял, нужно принудительно менять значение перед записью в базу, то в контроллере перед сохранением задаёте нужное значение:

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

//...
if ($model->load(Yii::$app->request->post())) {
    $model->id_specialization = $num->id;
    $model->save();
}
//...
Или в модели метод beforeSave()

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

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) { 
        //... тут ваш код
        $this->id_specialization = $num->id;
        return true;
    }
    return false;
}
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Re: Как форме присвоить значение

Сообщение Gyry »

Dominus писал(а): 2017.11.20, 15:54 Если я правильно понял, нужно принудительно менять значение перед записью в базу, то в контроллере перед сохранением задаёте нужное значение:

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

//...
if ($model->load(Yii::$app->request->post())) {
    $model->id_specialization = $num->id;
    $model->save();
}
//...
Или в модели метод beforeSave()

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

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) { 
        //... тут ваш код
        $this->id_specialization = $num->id;
        return true;
    }
    return false;
}
да ты правильно понял, мну просто надо передать из контролера значение в поле id_specialization. Вот мой контоллер, во вьюшке значение id_specialization равно 20, но в базу он не записывает. Где я допустил ошибку?

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

public function actionLink($id)
    {
        $model = new LinkSpecialization();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['update', 'id' => $id]);
        } else {
            $model->id_specialization = 20;
            $model->save();
            return $this->render('link', [
                'model' => $model,
                'num' => $this->findModel($id)
            ]);
        }
    }
    
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Как форме присвоить значение

Сообщение Dominus »

Gyry писал(а): 2017.11.20, 16:28 да ты правильно понял, мну просто надо передать из контролера значение в поле id_specialization. Вот мой контоллер, во вьюшке значение id_specialization равно 20, но в базу он не записывает. Где я допустил ошибку?

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

public function actionLink($id)
    {
        $model = new LinkSpecialization();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['update', 'id' => $id]);
        } else {
            $model->id_specialization = 20;
            $model->save();
            return $this->render('link', [
                'model' => $model,
                'num' => $this->findModel($id)
            ]);
        }
    }
    

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

public function actionLink($id)
    {
        $model = new LinkSpecialization();
	$num = $this->findModel($id);
	
        if ($model->load(Yii::$app->request->post())) {
            $model->id_specialization = $num->id;
            if($model->save())
                return $this->redirect(['update', 'id' => $id]);
        }
        return $this->render('link', [
            'model' => $model,                
        ]);
        
    }
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Re: Как форме присвоить значение

Сообщение Gyry »

Dominus писал(а): 2017.11.20, 16:32
Gyry писал(а): 2017.11.20, 16:28 да ты правильно понял, мну просто надо передать из контролера значение в поле id_specialization. Вот мой контоллер, во вьюшке значение id_specialization равно 20, но в базу он не записывает. Где я допустил ошибку?

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

public function actionLink($id)
    {
        $model = new LinkSpecialization();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['update', 'id' => $id]);
        } else {
            $model->id_specialization = 20;
            $model->save();
            return $this->render('link', [
                'model' => $model,
                'num' => $this->findModel($id)
            ]);
        }
    }
    

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

public function actionLink($id)
    {
        $model = new LinkSpecialization();
	$num = $this->findModel($id);
	
        if ($model->load(Yii::$app->request->post())) {
            $model->id_specialization = $num->id;
            if($model->save())
                return $this->redirect(['update', 'id' => $id]);
        }
        return $this->render('link', [
            'model' => $model,                
        ]);
        
    }
О, спасибо всё заработало)
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Как форме присвоить значение

Сообщение Dominus »

Немного оптимизации:

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

public function actionLink($id)
    {
        $model = new LinkSpecialization();	
        if ($model->load(Yii::$app->request->post())) {
            $num = $this->findModel($id);
            $model->id_specialization = $num->id;
            if($model->save())
                return $this->redirect(['update', 'id' => $model->id_specialization]);
        }
        return $this->render('link', [
            'model' => $model,                
        ]);        
    }
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Как форме присвоить значение

Сообщение caHek2x »

интересно ...
$num = $this->findModel($id);
по какому полю оно ищет ... ? по $num->id ?
тогда может вообще не надо искать а сразу
$model->id_specialization = $id;
а проверку на существование записи с этим ид уже перенести в валидацию ...
а если уж и ищите то может стоит проверить $num на null ... ?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Как форме присвоить значение

Сообщение Dominus »

Это уже задумка автора))
Так то да, логичнее сразу $id присваивать, значение же одно и тоже)

Может в findModel() что то еще вызывается.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Закрыто