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);
  • 相关阅读:
    [01] 异常的概念和处理
    [03] 节点流和处理流
    [02] 输入/输出流 和 字节/字符流
    [01] File类
    Apache的https协议配置
    Apache的虚拟主机配置
    Apahce的虚拟用户认证及server-status页
    Apache配置日志功能
    Apache脚本路径别名(CGI接口)
    Apache配置站点根目录、用户目录及页面访问属性
  • 原文地址:https://www.cnblogs.com/woods1815/p/11437940.html
Copyright © 2011-2022 走看看