我是靠谱客的博主 名字长了才好记,最近开发中收集的这篇文章主要介绍Laravel 保存数据时自动去除模型中没有在数据库表中定义的字段,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在 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 保存数据时自动去除模型中没有在数据库表中定义的字段所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部