Не попадают данные в БД

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
demiurge
Сообщения: 16
Зарегистрирован: 2015.08.25, 13:06

Не попадают данные в БД

Сообщение demiurge »

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

views/site/index.php

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

<?php

/* @var $this yii\web\View */

use yii\helpers\Html;
use yii\helpers\Url;
use yii\bootstrap\ActiveForm;

$this->title = 'Note';
?>
<div class="site-index">

    <div class="jumbotron">

        <div class="messages">

            <?php $form = ActiveForm::begin(
                [
                    'options' => ['enctype'=>'multipart/form-data']
                ]
            ); ?>
            
            <?=$form->field($model, 'email')->textInput() ?>

            <div class="form-group">
                <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
            </div>
            <?php ActiveForm::end(); ?>

        </div><!-- messages -->
    </div>

</div>

Модель Messages.php

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

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "messages".
 *
 * @property integer $id
 * @property string $message
 * @property integer $user_id
 * @property integer $created
 */
class Messages extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public $message;
    public $email;

    public static function tableName()
    {
        return 'messages';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
//            [['message'], 'required'],
//            [['email'], 'required'],
//            [['email'], 'email']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'message' => 'Текст сообщения',
            'email' => 'Введите ваш E-mail'
        ];
    }

    public function message()
    {
        $mess = new Messages();
        $mess->message = $this->message;
        $mess->created = 111;
        $mess->user_id = 222;
        $mess->email = $this->email;

        return $mess->save() ? true : false;
    }
}

SiteController.php

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

public function actionIndex()
    {
        $model = new Messages();

        if($model->load(Yii::$app->request->post()) && $model->validate())
        {

            if($model->message())
            {
                Yii::$app->session->setFlash('success', 'Успешно добавлено.');
                return $this->goHome();
            }
            else
            {
                Yii::$app->session->setFlash('error', 'Возникла ошибка при регистрации');
            }

        }
        else
        {

        }

        return $this->render(
            'index',
            [
                'model' => $model
            ]
        );
    }
В БД есть таблица messages с полями message, user_id, created, email.
В поле "email" никак не хочет записываться email. Создаётся новая строка, но поле email пустое. В поля created и user_id вписываются "111" и "222", а email пустое. Что-то ничего не могу понять, только начинаю разбираться в Yii2.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Не попадают данные в БД

Сообщение samdark »

У вас email и имя поля в базе и имя свойства класса. Конфликт.
demiurge
Сообщения: 16
Зарегистрирован: 2015.08.25, 13:06

Re: Не попадают данные в БД

Сообщение demiurge »

Сменил имя поля на "mail".
Модель поправил:

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

    public function message()
    {
        $mess = new Messages();
        $mess->message = $this->message;
        $mess->created = 111;
        $mess->user_id = 222;
        $mess->mail = 'test';

        return $mess->save() ? true : false;
    } 
Всё-равно в поле "mail" ничего не попадает, хотя и пишет "Успешно добавлено".
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Не попадают данные в БД

Сообщение Onotole »

А правила почему закомментированы?
demiurge
Сообщения: 16
Зарегистрирован: 2015.08.25, 13:06

Re: Не попадают данные в БД

Сообщение demiurge »

Да, правила раскомментировал, стали приходить данные.
Но теперь $mess->save() возвращает false.
Модель сейчас такая:

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

public function message()
    {
        $mess = new Messages();

        $mess->mail = $this->email;

        return $mess->save() ? true : false;
    }
Т.е., если так:

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

public function message()
    {
        $mess = new Messages;

        $mess->mail = $this->email;

        exit($mess->mail);

        return $mess->save() ? true : false;
    } 
то вижу email, отправленный через форму.
Хочется уловить тот тонкий момент, когда нужно обратиться к определённому полю в Yii2.
Последний раз редактировалось demiurge 2015.08.28, 15:07, всего редактировалось 1 раз.
andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: Не попадают данные в БД

Сообщение andrei.obuhovski »

email валидацю не проходит.
сделай var_dump($mess->errors)
demiurge
Сообщения: 16
Зарегистрирован: 2015.08.25, 13:06

Re: Не попадают данные в БД

Сообщение demiurge »

array(0) { }

Убрал из правил валидации [['email'], 'email'], всё-равно false.
Аватара пользователя
hrebet
Сообщения: 18
Зарегистрирован: 2012.11.21, 18:55
Откуда: Украина, Одесса

Re: Не попадают данные в БД

Сообщение hrebet »

Доброго вечера! 8-)

1. Называть таблицы множественной формой не есть правило хорошего тона, используйте message.
2. Зачем в правилах валидации имена полей обрамлять в дополнительный массив, если это единичное правило, используйте:

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

['message', 'required'], 
3. Метод message модели Message не слишком многословен, используйте более говорящее название, например create, не говоря о том, что такие операции должны проходить на уровне контроллера.
4. Введите ваш E-mail не является корректным название атрибута, представьте себе описание ошибок с его участием.

Теперь к делу :ugeek: :D

Повторил Ваш сценарий, валидатор ругается на отсутствие значения у обязательного атрибута message, добавив его в форму - информация успешно сохраняется. Ничего необычного, меня ввело в заблуждение отсутствие таких ошибок в Вашем сообщении. ;)
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Не попадают данные в БД

Сообщение mihail_dev »

из модели

вот эти строчки просто убери
public $message;
public $email;
Изображение
Ответить