【问题标题】:Laravel Mass assignment fill() method skipping one valueLaravel Mass 赋值 fill() 方法跳过一个值
【发布时间】:2022-08-22 16:28:31
【问题描述】:

问题:分配\"role_id\"

代码:

function register(Request $request){
        $validated = $request->validateWithBag(\'ers\', [
            \'email\'=>\'required\',
            \'password\'=>\'required|min:6\',
            \'role_id\'=>\'integer\',
            \'name\'=>\'required\',
        ]);

        $user = new User;
        $user->fill($validated);
        // $user->role_id = $request->role_id;
        $user->save();

        return response(\"Saved record\");
    }

我试过的:

  1. role_id 重命名为roleid
  2. 当我取消注释手动 $user->role_id = $request->role_id 时,它可以工作,但我想知道为什么 fill() 不为我这样做。

    价值来自:

    <select class=\"input100\" name=\"role_id\">
        <option value=1>Standard Customer</option>
        <option value=2>Doctor</option>
        <option value=3>Distributor</option>
    </select>
    

    注意

    • 用户的数据库架构具有 role_id 数据类型整数(如果此信息相关)
    • dd($request->all()) 传递了 role_id
    • dd($validated) 还向我显示了数组中的 role_id
    • 除了 role_id 之外的所有 3 个值都被捕获,除了 role_id
    • 我收到错误,即没有为 role_id 赋值,生成的查询如下:
    insert into
      `users` (
        `email`,
        `password`,
        `name`,
        `updated_at`,
        `created_at`
      )
    values
      (
        abc@gmail.com,
        password123,
        Imran Ahmad,
        2022 -08 -17 05: 11: 34,
        2022 -08 -17 05: 11: 34
      )
    

    如果您想让我向您展示进一步的内容,请告诉我。

    标签: php laravel eloquent


    【解决方案1】:

    fill() 是质量分配功能之一。为了防止批量分配漏洞,在您的模型中,您应该定义要使哪些模型属性可批量分配。您可以使用模型上的$fillable 属性来执行此操作。确保role_id 在该列表中。

    如果您想让所有属性都可以批量分配,您可以将模型的 $guarded 属性定义为空数组。如果你选择不保护你的模型,你应该采取特殊照护始终手工制作传递给 Eloquent 的 fillcreateupdate 方法的数组。

    查看更多文档here

    【讨论】:

    • 非常感谢!使 $guarded 为空有效.. 想知道为什么其他字段没有问题并且它卡在 role_id 上.. 也感谢您编辑我的帖子格式,我是新手,所以是的
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多