📅  最后修改于: 2023-12-03 15:17:15.690000             🧑  作者: Mango
在 Laravel 中,模型是与数据表交互的主要方式。当你创建一个模型时,它将尝试自动推断与数据表的对应关系。但是,在许多情况下,你需要手动指定模型中的数据字段。在本文中,我们将介绍如何在 Laravel 模型中设置字段。
首先,我们需要创建一个模型。Laravel 提供了 Artisan 命令来自动生成模型,如下所示:
php artisan make:model User
这将创建一个 User 模型,对应 users
数据表。
Laravel 提供了 fillable
属性来定义模型中可被批量赋值的字段。默认情况下,所有字段都是不可批量赋值的。例如,如果你想允许 User
模型中的 name
和 email
字段被批量赋值,可以这样定义:
class User extends Model
{
protected $fillable = ['name', 'email'];
}
这样,我们就可以使用 create
方法来创建新的用户:
User::create(['name' => 'John Doe', 'email' => 'john@example.com']);
但是,如果我们尝试批量赋值 User
模型的其他字段,将会抛出异常。
相反,Laravel 还提供了 guarded
属性来定义模型中不可被批量赋值的字段。如果你想在 User
模型中保护 id
字段不被批量赋值,可以这样定义:
class User extends Model
{
protected $guarded = ['id'];
}
这样,在使用 create
方法创建新的用户时,我们无法批量赋值 id
字段:
User::create(['id' => 1, 'name' => 'John Doe', 'email' => 'john@example.com']);
将抛出异常。
如果你需要在返回模型实例时更改字段的值,可以使用访问器。访问器允许你以自定义的方式返回模型属性的值,而不是直接返回字段的值。例如,如果你想将 User
模型中的 name
字段转换为大写字母,可以这样定义:
class User extends Model
{
public function getNameAttribute($value)
{
return ucfirst($value);
}
}
这样,当你获取 User
模型的 name
属性时,它将自动转换为大写字母:
$user = User::find(1);
echo $user->name; // John Doe
如果你希望在将数据赋值给模型属性之前对其进行更改,可以使用修改器。修改器允许你以自定义的方式更改模型属性的值,而不是直接为属性赋值。例如,如果你想将 User
模型中的 name
字段转换为小写字母,可以这样定义:
class User extends Model
{
public function setNameAttribute($value)
{
$this->attributes['name'] = strtolower($value);
}
}
这样,当你为 User
模型的 name
属性赋值时,它将自动转换为小写字母:
$user = new User;
$user->name = 'John Doe';
echo $user->name; // john doe
以上就是在 Laravel 模型中设置字段的方法。你可以使用白名单和黑名单来控制模型中哪些字段可以被批量赋值,并使用访问器和修改器来自定义模型中字段的值。掌握这些方法可以帮助你更好地管理数据表,使应用程序更加可靠。