zoukankan      html  css  js  c++  java
  • Yii2中$model->load($data)一直返回false问题

    上次使用$model->load()方法时一直返回false,数据添加不成功,这里记录一下:

    出错代码:

    $data = [
        'name' => 'test',
        'phone' => '13000000000',
        'email' => '123456@qq.com'
    ];
    $model = new User();
    $model->load($data);
    if ($model->validate()) {
        $model->save();
    }

    查找问题:

    以下是Yii2中load()方法的具体实现:

    public function load($data, $formName = null)
    {
        $scope = $formName === null ? $this->formName() : $formName;
        if ($scope === '' && !empty($data)) {
            $this->setAttributes($data);
     
            return true;
        } elseif (isset($data[$scope])) {
            $this->setAttributes($data[$scope]);
     
            return true;
        }
     
        return false;
    }

    1、通过查看load()方法可知,load()方法有两个参数,第一个参数 $data 是要填充的数据,第二个参数 $formName 是选择指定的模型。

    2、如果第二个参数不传,$formName 会默认为null,会默认取当前模型 $this->formName()。

    3、如果指定了模型,会将模型名称作为key值,通过 $data[$formName] 取值,也就是这时候应该传的 $data 格式是:

    $data = [
        'User' => [
            'name' => 'test',
            'phone' => '13000000000',
            'email' => '123456@qq.com'
        ]
    ];

    4、如果 $formName 传空字符串,则 $data 传递参数格式为:

    $data = [
        'name' => 'test',
        'phone' => '13000000000',
        'email' => '123456@qq.com'
    ];

    这时应该使用:

    $model->load($data, '');

    也可以直接使用以下代码:

    $model->attributes = $data;
    // 或者
    $model->setAttributes($data);
  • 相关阅读:
    java不解压tar.gz读取包里面的某个文件内容或读取远程zip包中的文件内容
    java调用hadoop api
    httpclient读取https请求的数据
    使用svgo压缩图片
    重试机制
    java利用zip解压slpk文件
    mysql查询时特殊字符转译
    *.vue文件的template标签内使用form标签
    canvas.addEventListener()
    addEventListener(event, function, useCapture) 简记
  • 原文地址:https://www.cnblogs.com/rickyctbu/p/12995202.html
Copyright © 2011-2022 走看看