laravel 中 模型中 $fillable的用法

在 Laravel 中,$fillable 属性在模型中扮演着非常重要的角色。它是一个数组,指定了可以被批量赋值的属性列表。批量赋值是指在创建或更新模型时,通过一个数组来赋值给模型的属性,这在处理表单数据时特别有用。

使用 $fillable 可以增加应用程序的安全性,防止用户恶意更新模型中不应该被直接更新的属性,这种安全漏洞通常称为“批量赋值漏洞”(Mass Assignment Vulnerability)。

示例

假设你有一个 User 模型,它有 nameemailpassword 等属性。你可能不希望用户能够直接更新某些敏感字段,如 password,因此你可以在模型中使用 $fillable 来定义哪些属性是可以被批量更新的。

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

在上面的例子中,$fillable 属性包含了 nameemail,这意味着只有这两个属性可以通过批量赋值来更新。如果尝试更新模型时传入了不在 $fillable 数组中的属性,如 password,那么这个属性将不会被赋值。

使用批量赋值

当使用 Eloquent 的 createupdate 方法时,Laravel 会检查 $fillable 属性来确定哪些给定的数组键值可以被批量赋值。

// 创建新用户
$user = User::create([
    'name' => 'John Doe',
    'email' => 'john@example.com',
    // 'password' => 'secret',因为 'password' 不在 $fillable 中,所以这里不会被赋值
]);

// 更新用户信息
$user->update([
    'name' => 'Jane Doe',
    // 同样,任何不在 $fillable 中的属性都不会被更新
]);

重要提示

  • 使用 $fillable 时,务必确保所有应该被用户更新的字段都包含在数组中,否则这些字段将无法通过批量更新被修改。
  • 另一个与 $fillable 相对的属性是 $guarded,它定义了哪些属性不可以被批量赋值。注意,不要同时使用 $fillable$guarded,因为这可能会导致混淆和错误。一般来说,使用 $fillable 更加推荐,因为它可以明确指出哪些字段是安全的。

通过合理使用 $fillable,你可以在保证 Laravel 应用程序安全的同时,方便地处理批量数据更新。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP使用命令自动生成模型类Student,需要使用Laravel框架的Artisan命令行工具。首先,需要在终端进入Laravel项目的根目录,然后运行以下命令: ``` php artisan make:model Student -m ``` 这个命令会生成一个名为Student的模型类,并且会同时生成一个与模型类对应的迁移文件,用于创建students表。在生成迁移文件时,可以使用--create选项指定表名,如: ``` php artisan make:model Student -m --create=students ``` 接下来,在生成的Student模型添加$table、$timestamps和$fillable属性,如下所示: ```php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { protected $table = 'students'; // 指定数据表名 public $timestamps = true; // 开启自动维护时间戳 protected $fillable = ['name', 'age', 'gender']; // 指定可批量赋值的属性 } ``` 其,$table属性用于指定模型对应的数据表名,$timestamps属性用于控制是否自动维护created_at和updated_at字段,$fillable属性用于指定可以通过模型的create()方法批量赋值的属性。 最后,需要在students表添加测试数据,可以使用Laravel的Seeder和Factory来实现。首先,需要在终端运行以下命令生成一个Student模型的Seeder: ``` php artisan make:seeder StudentSeeder ``` 然后,在生成的StudentSeeder类编写填充数据的逻辑,如下所示: ```php <?php use Illuminate\Database\Seeder; use App\Student; class StudentSeeder extends Seeder { public function run() { factory(Student::class, 10)->create(); } } ``` 以上代码使用了Laravel的Factory来生成10条Student模型的测试数据。最后,运行以下命令执行seeder填充数据: ``` php artisan db:seed --class=StudentSeeder ``` 执行完毕后,即可在students表查看到添加的测试数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值