• 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);
  • 相关阅读:
    noi.openjudge——2971 抓住那头牛
    P1265 公路修建 洛谷
    P2330 [SCOI2005] 繁忙的都市 洛谷
    P1331 海战 洛谷
    P1464 Function 洛谷
    基于Manhattan最小生成树的莫队算法
    zoj3659
    poj1182
    hdu1325
    hdu3635
  • 原文地址:https://www.cnblogs.com/rickyctbu/p/12995202.html
Copyright © 2020-2023  润新知