Не сохраняются данные в БД, обновление работает.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Не сохраняются данные в БД, обновление работает.

Сообщение Hoting »

Привет друзья, уже голову сломал, не могу разобраться в проблеме, почему то при заполнении профиля новым пользователем данные в БД не сохраняются, хотя редактирование проходит.

вот файлик модели

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

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "people".
 *
 * @property int $id_people Уникальный ключ
 * @property int $id_user
 * @property string $photo Фотография контакта
 * @property string $surname Фамилия
 * @property string $name Имя
 * @property string $middle_name Отчество
 * @property int $birthday Дата рождения
 * @property int $sex Пол
 * @property int $profession
 * @property string $email Электронный адрес
 * @property string $phone Телефон
 * @property string $pasport Паспорт
 * @property string $register Прописка
 * @property string $adress Адрес проживания
 * @property int $inn ИНН сотрудника
 * @property int $snils СНИЛС сотрудника
 * @property string $education Образование
 * @property string $sizclothes Размер спецодежды
 * @property string $sizboots Размер обуви
 * @property string $skills Навыки специалиста
 * @property string $personal Персональные качества сотрудника
 * @property string $experience Опыт работы
 * @property int $smoke Отношение к курению
 * @property int $alcohol Отношение к алеоголю
 * @property string $drive Номер водительского удостоверения
 * @property int $catdrive Категория водительского
 * @property int $bistrip Готовность к командировкам
 * @property int $marriage Семейное положение
 * @property int $law Судимости
 * @property int $pay Желаемый доход
 * @property string $socseti1 Соцсеть №1
 * @property string $socseti2 Соцсеть №3
 * @property int $workincompany Работа в компании
 * @property int $created_at Запись создана
 *
 * @property User $user
 * @property PeoplePhone[] $peoplePhones
 */
class People extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'people';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['id_user', 'sex', 'profession', 'smoke', 'alcohol', 'bistrip', 'marriage', 'law', 'pay', 'workincompany', 'created_at'], 'integer'],
            [['surname', 'name', 'created_at', 'birthday'], 'required'],
            [['photo', 'surname', 'name'], 'string', 'max' => 35],
            [['middle_name'], 'string', 'max' => 40],
            [['email'], 'string', 'max' => 50],
            [['phone'], 'string', 'max' => 18],
            [['pasport', 'register', 'adress', 'education', 'sizclothes', 'sizboots', 'skills', 'personal', 'experience', 'drive', 'socseti1', 'socseti2'], 'string', 'max' => 150],
            [['pasport'], 'unique'],
            [['inn'], 'string', 'max' => 12],
            [['snils'], 'string', 'max' => 14],
            [['catdrive'], 'string', 'max' => 20],
            [['id_user'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['id_user' => 'id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id_people' => 'Id People',
            'id_user' => 'Id User',
            'photo' => 'Фото',
            'surname' => 'Фамилия',
            'name' => 'Имя',
            'middle_name' => 'Отчество',
            'birthday' => 'Дата рождения',
            'sex' => 'Пол',
            'profession' => 'Профессия',
            'email' => 'Email',
            'phone' => 'Телефон',
            'pasport' => 'Паспортные данные',
            'register' => 'Адрес регистрации',
            'adress' => 'Адрес проживания',
            'inn' => 'ИНН',
            'snils' => 'СНИЛС',
            'education' => 'Образование',
            'sizclothes' => 'Размер одежды',
            'sizboots' => 'Размер обуви',
            'skills' => 'Навыки',
            'personal' => 'Персональные качества',
            'experience' => 'Опыт работы',
            'smoke' => 'Отношение к курению',
            'alcohol' => 'Отношение к алкоголю',
            'drive' => 'Водительское удостоверение',
            'catdrive' => 'Водительсвкая категория',
            'bistrip' => 'Готовность к командировкам',
            'marriage' => 'Семейное положение',
            'law' => 'Наличие судимости',
            'pay' => 'Желаемый уровень дохода',
            'socseti1' => 'Социальная сеть №1',
            'socseti2' => 'Социальная сеть №2',
            'workincompany' => 'Работа в компании',
            'created_at' => 'Запись создана',
        ];
    }

    //Связь обратная с таблицей USer
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'id_user']);
    }

    // Метод добавления записи введенных пользователем
    public function updatePeople(){

        //Если записи нет, создадим новый экземпляр.
        $people = ($people = People::findOne(Yii::$app->user->id)) ? $people : new  People();

        $people->id_user = Yii::$app->user->id; // поле id_user = id текущего пользователя
        $people->surname = $this->surname; // поле surname = введеному имени в поле Фамилия
        $people->name = $this->name;
        $people->middle_name = $this->middle_name;
        //'photo' => 'Фото',

        //преобразуем даты в формат UNIX
        if(isset($this->birthday))
        {
            //формируем массив из строк даты, месяца, года, разделяя общую дату по символу"/"
            $DateArrayIn = explode('.', $this->birthday);
            //переводим в Unix метку
            $people->birthday = mktime(0, 0, 0, $DateArrayIn[1], $DateArrayIn[0], $DateArrayIn[2]);
        }

        $people->sex = $this->sex;
        $people->profession = $this->profession;
        $people->email = $this->email;
        $people->phone = $this->phone;
        $people->pasport = $this->pasport;
        $people->register = $this->register;
        $people->adress = $this->adress;
        $people->inn = $this->inn;
        $people->snils = $this->snils;
        $people->education = $this->education;
        $people->sizclothes = $this->sizclothes;
        $people->sizboots = $this->sizboots;
        $people->skills = $this->skills;
        $people->personal = $this->personal;
        $people->experience = $this->experience;
        $people->smoke = $this->smoke;
        $people->alcohol = $this->alcohol;
        $people->drive = $this->drive;
        $people->catdrive = $this->catdrive;
        $people->bistrip = $this->bistrip; //
        $people->marriage = $this->marriage; //Семейное положение
        $people->law = $this->law; //Судимости сотрудника
        $people->pay = $this->pay; //Желаемый доход
        $people->socseti1 = $this->socseti1; //Ссылка на соц.сети
        $people->socseti2 = $this->socseti2; //Ссылка на соц.сети
        // пока не трогаем значение $people->workincompany = $this->workincompany;
        $people->created_at = time(); //Текущее зачение времени в формате UNIX

        return $people->save() ? true : false; //возвратим значение успеха или же иначе ...
    }

}
Файлик контроллера

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

<?php

namespace backend\controllers;

use app\models\User;
use Yii;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use app\models\People;


class PeopleController extends \yii\web\Controller
{
    public $defaultAction = 'peopleview'; //контроллер по умолчанию

    /**
     * @inheritdoc
     */

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['login'],
                        'allow' => true,
                    ],
                    [
                        'actions' => ['peopleeditform', 'peopleview'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

    //Контроллер отображения всех данных пользователя, доступные для просмотра или редактирования
    public function actionPeopleview()
    {
        //Осуществим проверку на то, есть ли записи в таблице PEOPLE
        if($model = People::findOne(['id_user' => Yii::$app->user->id]))
        {
            return $this->render('peopleview', ['model' => $model]);
        }
        else
        {
            $model = new People();
            return $this->render('peopleeditform', ['model' => $model]);
        }
    }

    public function actionPeopleeditform()
    {
        $model = ($model = People::findOne(Yii::$app->user->id)) ? $model : new People();

        if ($model->load(Yii::$app->request->post()) && $model->validate())
        {
            if ($model->updatePeople())
                Yii::$app->session->setFlash('success', 'Профиль успешно отредактирован'); // Сообщение успех
            else
                Yii::$app->session->setFlash('error', 'Профиль не изменен');

            return $this->refresh(); //Перезагружаем страницу
        }

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

}
у меня одна форма и для редактирования профиля и для создания нового профиля. Профиль привязывается к таблице User и логину в системе...

Подскажите что делаю не так, и вообще как искать и выявлять такие ошибки ...
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Не сохраняются данные в БД, обновление работает.

Сообщение futbolim »

Попробуйте

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

if(!$people->save()) {
    var_dump($people->errors);
}
И ещё. Вместо тучи присваиваний, типа

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

$people->sex = $this->sex;
        $people->profession = $this->profession;
        $people->email = $this->email;
        $people->phone = $this->phone;
        $people->pasport = $this->pasport;
        $people->register = $this->register;
        $people->adress = $this->adress;
        $people->inn = $this->inn;
        $people->snils = $this->snils;
        $people->education = $this->education;
        $people->sizclothes = $this->sizclothes;
        $people->sizboots = $this->sizboots;
        $people->skills = $this->skills;
        $people->personal = $this->personal;
        $people->experience = $this->experience;
        $people->smoke = $this->smoke;
        $people->alcohol = $this->alcohol;
        $people->drive = $this->drive;
        $people->catdrive = $this->catdrive;
        $people->bistrip = $this->bistrip; //
        $people->marriage = $this->marriage; //Семейное положение
        $people->law = $this->law; //Судимости сотрудника
        $people->pay = $this->pay; //Желаемый доход
        $people->socseti1 = $this->socseti1; //Ссылка на соц.сети
        $people->socseti2 = $this->socseti2; //Ссылка на соц.сети
Можно сделать

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

$people->attributes = $this->attributes;
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Не сохраняются данные в БД, обновление работает.

Сообщение urichalex »

futbolim писал(а): 2018.08.18, 14:14 И ещё. Вместо тучи присваиваний, типа

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

$people->sex = $this->sex;
        $people->profession = $this->profession;
        $people->email = $this->email;
        $people->phone = $this->phone;
        $people->pasport = $this->pasport;
        $people->register = $this->register;
        $people->adress = $this->adress;
        $people->inn = $this->inn;
        $people->snils = $this->snils;
        $people->education = $this->education;
        $people->sizclothes = $this->sizclothes;
        $people->sizboots = $this->sizboots;
        $people->skills = $this->skills;
        $people->personal = $this->personal;
        $people->experience = $this->experience;
        $people->smoke = $this->smoke;
        $people->alcohol = $this->alcohol;
        $people->drive = $this->drive;
        $people->catdrive = $this->catdrive;
        $people->bistrip = $this->bistrip; //
        $people->marriage = $this->marriage; //Семейное положение
        $people->law = $this->law; //Судимости сотрудника
        $people->pay = $this->pay; //Желаемый доход
        $people->socseti1 = $this->socseti1; //Ссылка на соц.сети
        $people->socseti2 = $this->socseti2; //Ссылка на соц.сети
Можно сделать

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

$people->attributes = $this->attributes;
И изменить в коде Profile[pay] на Profile[id_user] или другое поле (или добавить такое поле), и изменить тем самым профиль другому пользователю
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Не сохраняются данные в БД, обновление работает.

Сообщение futbolim »

urichalex писал(а): 2018.08.18, 14:20
futbolim писал(а): 2018.08.18, 14:14 И ещё. Вместо тучи присваиваний, типа

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

$people->sex = $this->sex;
        $people->profession = $this->profession;
        $people->email = $this->email;
        $people->phone = $this->phone;
        $people->pasport = $this->pasport;
        $people->register = $this->register;
        $people->adress = $this->adress;
        $people->inn = $this->inn;
        $people->snils = $this->snils;
        $people->education = $this->education;
        $people->sizclothes = $this->sizclothes;
        $people->sizboots = $this->sizboots;
        $people->skills = $this->skills;
        $people->personal = $this->personal;
        $people->experience = $this->experience;
        $people->smoke = $this->smoke;
        $people->alcohol = $this->alcohol;
        $people->drive = $this->drive;
        $people->catdrive = $this->catdrive;
        $people->bistrip = $this->bistrip; //
        $people->marriage = $this->marriage; //Семейное положение
        $people->law = $this->law; //Судимости сотрудника
        $people->pay = $this->pay; //Желаемый доход
        $people->socseti1 = $this->socseti1; //Ссылка на соц.сети
        $people->socseti2 = $this->socseti2; //Ссылка на соц.сети
Можно сделать

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

$people->attributes = $this->attributes;
И изменить в коде Profile[pay] на Profile[id_user] или другое поле (или добавить такое поле), и изменить тем самым профиль другому пользователю
Можно менять, можно не менять. Мозги зачем в голове?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Не сохраняются данные в БД, обновление работает.

Сообщение urichalex »

futbolim писал(а): 2018.08.18, 14:24
urichalex писал(а): 2018.08.18, 14:20 И изменить в коде Profile[pay] на Profile[id_user] или другое поле (или добавить такое поле), и изменить тем самым профиль другому пользователю
Можно менять, можно не менять. Мозги зачем в голове?
Я имею ввиду в браузере в инспекторе любой может изменить имя поля
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Не сохраняются данные в БД, обновление работает.

Сообщение futbolim »

urichalex писал(а): 2018.08.18, 15:02 Я имею ввиду в браузере в инспекторе любой может изменить имя поля
Зачем нам тогда rules() ?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Не сохраняются данные в БД, обновление работает.

Сообщение urichalex »

futbolim писал(а): 2018.08.18, 15:06
urichalex писал(а): 2018.08.18, 15:02 Я имею ввиду в браузере в инспекторе любой может изменить имя поля
Зачем нам тогда rules() ?
setAttributes() получает все атрибуты, не зависимо от rules
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Не сохраняются данные в БД, обновление работает.

Сообщение futbolim »

urichalex писал(а): 2018.08.18, 15:45
futbolim писал(а): 2018.08.18, 15:06
urichalex писал(а): 2018.08.18, 15:02 Я имею ввиду в браузере в инспекторе любой может изменить имя поля
Зачем нам тогда rules() ?
setAttributes() получает все атрибуты, не зависимо от rules
Я о том, что, если подменят - об этом можно не беспокоиться.
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Re: Не сохраняются данные в БД, обновление работает.

Сообщение Hoting »

В общем сделал пока так,
в предствлении поставил строчку

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

var_dump($model)
он мне выдал следующее

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

/mnt/Site/erp/backend/views/people/peopleeditform.php:16:
object(app\models\People)[116]
  private '_attributes' (yii\db\BaseActiveRecord) => 
    array (size=29)
      'surname' => string 'Иванов' (length=12)
      'name' => string 'Ива' (length=6)
      'middle_name' => string 'Иванович' (length=16)
      'birthday' => string '21.08.2018' (length=10)
      'sex' => string '0' (length=1)
      'sizclothes' => string '1' (length=1)
      'sizboots' => string '1' (length=1)
      'pasport' => string '' (length=0)
      'register' => string '' (length=0)
      'adress' => string '' (length=0)
      'inn' => string '' (length=0)
      'snils' => string '' (length=0)
      'education' => string '' (length=0)
      'experience' => string '' (length=0)
      'skills' => string '' (length=0)
      'marriage' => string '0' (length=1)
      'smoke' => string '0' (length=1)
      'alcohol' => string '0' (length=1)
      'law' => string '0' (length=1)
      'bistrip' => string '0' (length=1)
      'drive' => string '' (length=0)
      'catdrive' => string '' (length=0)
      'personal' => string '' (length=0)
      'profession' => string '' (length=0)
      'pay' => string '' (length=0)
      'phone' => string '' (length=0)
      'email' => string '' (length=0)
      'socseti1' => string '' (length=0)
      'socseti2' => string '' (length=0)
  private '_oldAttributes' (yii\db\BaseActiveRecord) => null
  private '_related' (yii\db\BaseActiveRecord) => 
    array (size=0)
      empty
  private '_relationsDependencies' (yii\db\BaseActiveRecord) => 
    array (size=0)
      empty
  private '_errors' (yii\base\Model) => 
    array (size=1)
      'created_at' => 
        array (size=1)
          0 => string 'Необходимо заполнить «Запись создана».' (length=72)
  private '_validators' (yii\base\Model) => 
    object(ArrayObject)[161]
      private 'storage' => 
        array (size=12)
          0 => 
            object(yii\validators\NumberValidator)[164]
              ...
          1 => 
            object(yii\validators\RequiredValidator)[170]
              ...
          2 => 
            object(yii\validators\StringValidator)[172]
              ...
          3 => 
            object(yii\validators\StringValidator)[171]
              ...
          4 => 
            object(yii\validators\StringValidator)[173]
              ...
          5 => 
            object(yii\validators\StringValidator)[174]
              ...
          6 => 
            object(yii\validators\StringValidator)[175]
              ...
          7 => 
            object(yii\validators\UniqueValidator)[178]
              ...
          8 => 
            object(yii\validators\StringValidator)[177]
              ...
          9 => 
            object(yii\validators\StringValidator)[179]
              ...
          10 => 
            object(yii\validators\StringValidator)[180]
              ...
          11 => 
            object(yii\validators\ExistValidator)[183]
              ...
  private '_scenario' (yii\base\Model) => string 'default' (length=7)
  private '_events' (yii\base\Component) => 
    array (size=0)
      empty
  private '_eventWildcards' (yii\base\Component) => 
    array (size=0)
      empty
  private '_behaviors' (yii\base\Component) => 
    array (size=0)
      empty
ставил в моделе

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

if(!$people->save()) {
    var_dump($people->errors);
}
результат нулевой, может что то не то делаю?

еще родилась мысль что, возможно, БД блокирует запись? таблицы User и Peolpe связаны между собой по ключу id_user это как то может влиять на запись?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Не сохраняются данные в БД, обновление работает.

Сообщение urichalex »

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

array (size=1)
      'created_at' => 
        array (size=1)
          0 => string 'Необходимо заполнить «Запись создана».' (length=72)
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Не сохраняются данные в БД, обновление работает.

Сообщение Йож »

TimestampBehavior в модели подключите на поле created_at
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Не сохраняются данные в БД, обновление работает.

Сообщение urichalex »

Йож писал(а): 2018.08.18, 23:32 TimestampBehavior в модели подключите на поле created_at
В нем присвоение идет после валидации
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Re: Не сохраняются данные в БД, обновление работает.

Сообщение Hoting »

Друзья , опытным путем определил что дело в датах, вернее их форматировании и записи в базе, ума не приложу что нужно сделать...

в форме дату получаю через скрипт

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

<?= $form->field($model, 'dateakr')->widget(\yii\jui\DatePicker::class,[
                'inline' => true,
                'language' => 'ru',
                'dateFormat' => 'dd.MM.yyyy',
                 ]) ?>
т.к. даты в базе хранятся в формате Integer в функции сохранения в модели делаю преобразования от даты к unix дате

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

$timeunix = \DateTime::createFromFormat('d.m.Y', $this->dateakr);
        $tendersite->dateakr = $timeunix->getTimestamp();
пробовал еще вот так

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

 //формируем массив из строк даты, месяца, года, разделяя общую дату по символу"/"
            $DateArrayFinish = explode('.', $this->dateakr);
            //переводим в Unix метку
            $tendersite->dateakr = mktime(0, 0, 0, $DateArrayFinish[1], $DateArrayFinish[0], $DateArrayFinish[2]);
результат тот же, запись не происходит.
Если закоментировать эти блоки, все проходит, данные добавляются без даты ...

В скрипте перед форматированием даты поставил Yii:info() для отслеживания
в дебаге

до выполнения скрипта преобразования даты
05:28:32.809 info application 24.08.2018

после преобразования даты
05:28:32.810 info application 1535088512

а это следующее сообщение, я так понял об ошибке которая не дает вставить...
05:28:32.813 info yii\db\ActiveRecord::insert Model not inserted due to validation error.

Что еще за ошибка проверки, как ее отловить?

PS попробовал присвоить метку в реального времени time() выдал тот же результат.
не могу разобраться почему происходит такая логика ... все вроде нормально в базе храним в int(11) по умолчанию NULL все должно добавляться, но не добавляется ...
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Re: Не сохраняются данные в БД, обновление работает.

Сообщение Hoting »

urichalex писал(а): 2018.08.18, 21:09

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

array (size=1)
      'created_at' => 
        array (size=1)
          0 => string 'Необходимо заполнить «Запись создана».' (length=72)
данный параметр должен присваиваться сам

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

$people->created_at = time();
Вообще заметил странную закономерность, в каких то местах скрипты срабатывают, в каких-то нет ... причины не вижу ... :(
Все дела в этих датах и преобразованиях ... непойму почему скрипт не хочет пихать их в базу... причем я уверен что раньше все работало! может какое-то обновление выходило или расширения что то не дают сделать? какие мысли друзья?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Не сохраняются данные в БД, обновление работает.

Сообщение urichalex »

Ваш скрипт делает ровно то, что вы пишете, ни больше ни меньше
uEhlO4a
Сообщения: 70
Зарегистрирован: 2017.08.12, 19:19

Re: Не сохраняются данные в БД, обновление работает.

Сообщение uEhlO4a »

у тебя что-то напутано с полем 'created_at'.

1. Если 'created_at' время создания записи - то используй поведение https://www.yiiframework.com/doc/api/2. ... mpbehavior
в этом случае в rules() убери все упоминания этого поля 'created_at'
2. Если 'created_at' задается через форму, и каком-то спец формате, то добавь фильтр который преобразует в целое, пример

public function rules()
{
return [
['created_at', function($attr) {
try {
$this->$attr = \Datetime::createFormFromat('YOUR_FORMAT', $this->$attr)->getTimestamp();
} catch (\Exception $e) {
$this->addError($attr, 'Wrong format');
}
}],
//Либо
['created_at', 'date', 'format' => 'php:YOUR_FORMAT'],
[['id_user', 'sex', 'profession', 'smoke', 'alcohol', 'bistrip', 'marriage', 'law', 'pay', 'workincompany', 'created_at'], 'integer'],
[['surname', 'name', 'created_at', 'birthday'], 'required'],

п.с.
И от жути вроде даты в формате целого числа лучше избавиться
Toshus
Сообщения: 14
Зарегистрирован: 2018.06.06, 21:06

Re: Не сохраняются данные в БД, обновление работает.

Сообщение Toshus »

Я не совсем понял, зачем Вы фактически клонируете уже готовую модель еще раз в функции updatePeople. У Вас в контроллере уже все сделано, туда нужно только перенести заполнение полей по умолчанию (id пользователя) в случае, когда создается новая запись в БД и вместо $model->updatePeople() вызвать $model->save().

По поводу присвоения поля created_at - у Вас до вызова $model->updatePeople() не доходит, так как модель не проходит валидацию в случае, когда у Вас в базе не найдена запись и создается новая модель. Поэтому и не создаются новые записи в БД. Вам нужно значение полю created_at присвоить до валидации.

Что касается преобразования данных, то если Вы в базе храните дату в unix-формате, то и правила валидации должны проверять это поле на целое число. Если же Вам необходимо это значение показывать пользователю в человекопонятном виде, то следует использовать форматтер в виде, если же Вам необходимо получать от пользователя значение в это поле из формы, то следует в модель добавить новый атрибут в виде геттера и сеттера, где будет преобразовываться значение из БД в строку даты и обратно. Ну и ActiveForm соответственно должно создавать поле для этого нового атрибута. В правилах валидации нужно настроить правило на проверку формата переданной строки, чтобы этот атрибут можно было получить массовым присвоением.
Ответить