概述
在 Laravel 中,如果你想在保存数据时自动去除模型中没有在数据库表中定义的字段,可以通过几种方式实现。以下是一些常见的方法:
1. 使用 $fillable
和 $guarded
属性
Laravel 中的 Eloquent 模型提供了 $fillable
和 $guarded
属性来控制哪些字段可以批量赋值(mass assignment)。你可以通过这两个属性来防止多余字段被保存。
$fillable
属性
$fillable
属性用于指定哪些字段可以批量赋值。如果某个字段没有被列在 $fillable
数组中,它将不会被保存到数据库中。
class User extends Model { protected $fillable = ['name', 'email']; // 只允许 'name' 和 'email' 字段批量赋值 }
$guarded
属性
$guarded
属性是 $fillable
的反义词,它指定了哪些字段不能批量赋值。如果某个字段在 $guarded
中列出,那么它将被保护,无法通过批量赋值进行操作。
class User extends Model { protected $guarded = ['id']; // 保护 'id' 字段,其他字段都可以批量赋值 }
2. 手动去除多余字段
如果你在保存数据时不想依赖 $fillable
或 $guarded
,也可以通过手动过滤请求数据来确保多余的字段不会被保存。例如:
$data = $request->only(['name', 'email']); // 只保留 'name' 和 'email' 字段 $user = new User($data); $user->save();
$request->only()
方法将只保留你指定的字段,并丢弃其他字段。
3. 使用 $hidden
属性
$hidden
属性用于定义在转换模型为数组或 JSON 时,应该被隐藏的字段。虽然它并不会影响数据库的保存,但是可以帮助你控制在返回模型时,哪些字段不会暴露给客户端。
class User extends Model { protected $hidden = ['password', 'remember_token']; // 隐藏 'password' 和 'remember_token' 字段 }
4. 使用模型的 save
方法时,自动过滤字段
你也可以通过覆盖 save
方法或在数据保存之前进行数据清理,自动去除不需要的字段。比如:
class User extends Model { // 重写 save 方法 public function save(array $options = []) { // 去除多余字段 $this->attributes = array_intersect_key($this->attributes, array_flip(['name', 'email'])); return parent::save($options); } }
总结
批量赋值保护:使用
$fillable
或$guarded
来控制可以保存到数据库的字段。手动过滤字段:在保存之前使用
$request->only()
方法手动过滤字段。字段隐藏:使用
$hidden
属性来隐藏字段,这对于数据转换时很有用。
根据你的具体需求,可以选择最适合的方式来去除多余字段。
最后
以上就是名字长了才好记为你收集整理的Laravel 保存数据时自动去除模型中没有在数据库表中定义的字段的全部内容,希望文章能够帮你解决Laravel 保存数据时自动去除模型中没有在数据库表中定义的字段所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复