【问题标题】:Laravel 4 - Eloquent mass assignment creates empty records after updateLaravel 4 - Eloquent mass assignment 在更新后创建空记录
【发布时间】:2026-01-19 05:35:02
【问题描述】:

我刚刚将 L4(骨架和包)更新到最新版本。

现在,当我尝试创建其中一个模型的新实例并将其保存到数据库时,我得到一个空记录,时间戳和主键除外。

此行为在所有模型(用户、投标、项目等)上都存在,因此这不是本地问题。

我都试过了

Project::create($project);

还有following this thread:

$new_project = new Project;

$new_project->fill($project);

$new_project->save();

但结果是一样的:一条空记录。

【问题讨论】:

    标签: php laravel laravel-4 mass-assignment eloquent


    【解决方案1】:

    因此,从docs 中可以看出,出于安全原因,现在默认阻止批量分配(例如,在不指定字段 (Input::all()) 的情况下从表单中获取所有数据并将其按原样保存到数据库可能导致分配不需要的字段,以防客户端通过添加名称与数据库中的字段对应的字段来操作表单。

    要指定允许分配的字段,应将相关字段作为白名单显式添加到模型上受保护的$fillable 数组中,或者创建使用$guarded 数组的黑名单

    【讨论】:

    • 实现这个 put protected $fillable = array();在你的模型中。
    【解决方案2】:

    我遇到了同样的问题,并找到了解决方案希望对其他人有所帮助

    $new_project = new Project;
    
    $new_project->unguard();
    
    $new_project->create($project);
    
    $new_project->reguard();
    
    
    or
    
    Project::unguard();
    $new_project = Project::create($project);
    $new_project->reguard();
    

    【讨论】:

    • 使用 guarded/fillable 属性,你已经完全去掉了这里批量赋值的安全性!
    • 是的,我现在正在关注受保护/可填充的属性,因为您可以看到它是一个旧帖子。
    最近更新 更多