Laravel 的 Eloquent ORM 提供了一种方便的方式来与数据库进行交互。模型类是这一机制的核心,它们代表了数据库中的表,并提供了各种方法来查询和操作这些表中的数据。静态属性在 Laravel 模型中扮演着特殊的角色,尤其是 $fillable
和 $guarded
这两个属性。
$fillable 属性:
create
或 update
方法时,Laravel 会检查传入的数据,只允许 $fillable
数组中列出的字段被赋值。$guarded 属性:
$guarded
,则未列出的字段默认是可以被赋值的。$fillable
或 $guarded
,可以防止恶意用户通过批量赋值的方式修改不应该被修改的字段,如密码、权限等敏感信息。$fillable
来限制只有特定的字段可以被赋值。$guarded
。namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
// 定义允许批量赋值的字段
protected $fillable = [
'name',
'email',
'password',
];
// 或者定义不允许批量赋值的字段
// protected $guarded = ['id', 'password'];
}
问题:尝试通过批量赋值更新一个受保护的字段时,操作失败。
原因:可能是由于 $fillable
或 $guarded
属性设置不当,导致 Laravel 阻止了对受保护字段的赋值。
解决方法:
$fillable
和 $guarded
属性,确保它们正确地反映了你的安全需求。$fillable
数组中。$guarded
数组中。// 如果你想允许 'role' 字段通过批量赋值来更新,可以这样做:
protected $fillable = ['name', 'email', 'password', 'role'];
// 如果你想阻止 'role' 字段被批量赋值,可以这样做:
protected $guarded = ['id', 'password', 'role'];
通过这种方式,你可以灵活地控制模型数据的赋值行为,确保数据的安全性和完整性。
领取专属 10元无门槛券
手把手带您无忧上云