【问题标题】:Update non fillable field in Laravel?更新 Laravel 中不可填写的字段?
【发布时间】:2020-07-28 07:46:27
【问题描述】:

我想从旧数据库中导入数据,所以我想填写一些字段,例如passwordUser 模型如下所示:

class User extends Authenticatable
{
    protected $fillable = [
        'name', 'email', 'password', 'disabled_at'
    ];
}

在我的迁移中,我有:

class ThumbnailSeeder extends Seeder
{
    public function run()
    {
        foreach(User::all() as $user) {
            $user->password = get_old_password($user->id);
            $user->save();
        }
    }
}

显然这不起作用,因为 Laravel 认为我在做 Mass assignment...

我应该改变什么来完成这项工作?

我看过其他类似的问题,例如 this 一个,但我仍然不知道如何绕过 Laravel 保护。

【问题讨论】:

  • 你需要user_id和old_passoword值
  • 其实我很惊讶你的代码不起作用。批量赋值意味着,您将一组值传递给 create 函数?!
  • 这段代码应该可以工作,它不是批量作业,我什至做了一个单元测试来测试它,一切正常
  • 我觉得你正在做的事情与$user->password = User::find($user->id)->password; 相当,这不会改变任何事情。可以分享get_old_password吗?
  • @ClémentBaconnier 你说得对,这是一个 X-Y 问题...我之前没有填充表格就更新了表格...

标签: php laravel eloquent fillable


【解决方案1】:

您可以尝试使用forceFill

foreach(User::all() as $user) {
    $user->forceFill(array('password ' => get_old_password($user->id));
    $user->save(); //Not sure if this is necessary
}

这是未经测试的代码。

【讨论】:

    【解决方案2】:

    正如我在评论中建议的那样; 我觉得你做的更像是

    foreach(User::all() as $user) {
        $user->password = User::find($user->id)->password; 
        $user->save();
    }
    

    这不会改变任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-22
      • 2017-04-18
      • 2014-12-11
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 2020-04-19
      相关资源
      最近更新 更多