2015-03-02 5 views
3

При добавлении новой записи вставьте только идентификатор, добавлены другие пустые поля.ActiveRecord Вставка пустых полей Yii2

public function actionSignup() 
{ 
    $model = new User(); 

    if(Yii::$app->request->post()) { 
     $model->id = 122; 
     $model->username = 'user123'; 
     $model->password = 'pass123'; 
     ... 
     $model->save(false); 
    } 
    return $this->render('signup',['model' => $model]); 
} 

var_dump показывает, что все необходимые данные приведены в $ модели ...

модель Пользователь:

<?php 

namespace app\models; 

use yii\captcha\Captcha; 
use yii\db\ActiveRecord; 

class User extends ActiveRecord implements \yii\web\IdentityInterface 
{ 
    public $id; 
    public $username; 
    public $password; 
    public $user_fio; 
    public $user_email; 
    public $user_group; 
    public $verifyCode; 

    private static $users; 

    public function actions() 
    { 
     return [ 
      'captcha' => [ 
       'class' => 'yii\captcha\CaptchaAction', 
       'fixedVerifyCode' => YII_ENV_TEST ? 'index' : null, 
      ], 
     ]; 
    } 

    public function rules() 
    { 
     return [ 
      [['username', 'user_fio', 'user_email', 'password', 'user_group'], 'required'], 
      [['username', 'user_fio', 'password'], 'string', 'max' => 70], 
      [['user_email'], 'string', 'max' => 150], 
      ["verifyCode", "captcha", 'captchaAction' => 'site/captcha'], 
     ]; 
    } 

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

    public function attributesLabels() 
    { 
     return [ 
      'username' => 'username', 
      'password' => 'password', 
      'user_fio' => 'fiouser', 
      'user_mail' => 'email', 
      'user_group' => 'group', 
      'verifyCode' => 'code with image' 
     ]; 
    } 

    public static function findIdentity($id) 
    { 
     $user = Users::find()->where(['id' => $id])->one(); 

     if(!count($user)) return null; 
     else 
      return new static($user); 
    } 

    public static function findIdentityByAccessToken($token, $type = null) 
    { 
     $user = Users::find()->where(['auth_key' => $token])->one(); 

     if(!count($user)) return null; 
     else 
      return new static($user); 
    } 

    public static function findByUsername($username) 
    { 
     $user = Users::find()->where(['username' => $username])->one(); 

     if(!count($user)) return null; 
     else 
      return new static ($user); 
    } 

    public function getId() 
    { 
     return $this->id; 
    } 


    public function getAuthKey() 
    { 
     return $this->authKey; 
    } 


    public function validateAuthKey($authKey) 
    { 
     return $this->authKey === $authKey; 
    } 

    public function validatePassword($password) 
    { 
     return $this->password === $password; 
    } 
} 

скрины таблица пользователей:

[Таблица с emptys] http://i.stack.imgur.com/EowUl.jpg
[Таблица структура] http://i.stack.imgur.com/lpdZM.jpg

Я ничего не изменилось, только я добавил действие регистрации нового пользователя

+0

У вас есть отладка? вы можете увидеть запрос вставки. – ankitr

+0

в отладке: INSERT INTO 'users' (' id') VALUES (NULL) – Yur4k

ответ

12

Вы объявили поля базы данных как поля общественного класса ($ ID, $ имя пользователя и т.д.), так что поля назначаются вместо внутренних полей ActiveRecord. Попробуйте удалить или прокомментировать общедоступные поля класса.

+2

Спасибо, когда удалены все общедоступные поля, он работает) – Yur4k

Смежные вопросы