Yii Framework 2.0 -findModel返回一个空对象

时间:2017-03-31 10:33:01

标签: php postgresql yii2

我正在尝试显示我存储在数据库中的表单值。但它没有发生并且还返回空值。我添加了我做的任何事情。

控制器

protected function findModel($id)
    {
        if (($model = UserRegistration::find($id)->one()) !== null) {
            return $model;
        } else {
            throw new NotFoundHttpException('The requested page does not exist.');
        }
    }

模型

这是我的模型。我已将所有变量声明为public.Is有问题吗?如果我也删除即时错误。

class UserRegistration extends ActiveRecord
{
    public $username;
    public $firstname;
    public $lastname;
    public $email;
    public $Country;
    public $State;
    public $City;
    public $phone_number;
    public $about_me;
    public $password;
    public $verify_password;    
    public $photo;

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

    public function rules()
    {
        return [
            [['username','password', 'email'], 'required'],
            [['status', 'created_at', 'updated_at', 'teespring_id'], 'integer'],
            [['username','lastname','firstname', 'password_hash', 'password_reset_token', 'email','about_me'], 'string', 'max' => 255],
            [['auth_key'], 'string', 'max' => 32],
            [['role'], 'string', 'max' => 10],
            [['email','username'],'email'],
            [['email','username','password_reset_token'], 'unique'],
            ['phone_number','string','length'=>10],
            [['Country','State','City'],'string'],
            ['verify_password','compare','compareAttribute'=>'password'],
            [['photo'],'file', 'extensions' => 'png, jpg']
        ];
    }
}

更新:我也试过了$model = UserRegistration::findOne($id)。没有运气 请帮帮我。

4 个答案:

答案 0 :(得分:1)

它是UserRegistration::findOne($id)而您必须声明来自数据库的属性,因为这些属性为空。

答案 1 :(得分:1)

它看起来很奇怪。对于用户注册,此模型看起来像 ModelForm ,并且它不需要有表格。

我认为你也有用户模型,所以你应该尝试 User :: findOne($ id)

如果您只有一个用户注册的模型,那么您不应该将表格中的属性设置为公开。

所以你只需要 public $ verify_password ,因为我猜你的表中没有这行。我认为你没有表中的照片行,因为通常照片名称是user_id。在这种情况下,您应该将其设置为公开

你可以从用户表中获取所有行,这样我就可以为你创建一个合适的模型吗?

答案 2 :(得分:1)

这是错误的。

$model = UserRegistration::find($id)->one()

应该是:

$model = UserRegistration::findOne($id);

$model = UserRegistration::find()->where(['id' => $id])->one();

如果$ id被称为'id'字段

答案 3 :(得分:0)

最后我得到了解决方案。我创建了两个findModel并渲染到表单。

public function actionProfile(){

            $model      = $this->findModel(Yii::$app->user->identity->id);
            $profile    = $this->findProfileModel(Yii::$app->user->identity->id);
            return $this->render('/userregister/update', [
                'model' => $model,
                'profile'=>$profile,
            ]);
    }

谢谢大家。