2

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

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 ......

我应该改变什么才能使这项工作?

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

4

2 回答 2

5

您可以尝试使用forceFill.

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

这是未经测试的代码。

于 2020-07-28T07:55:23.493 回答
3

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

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

这不会改变任何事情。

于 2020-07-28T08:07:57.950 回答