📜  laravel 模型设置字段 laravel - PHP (1)

📅  最后修改于: 2023-12-03 15:17:15.690000             🧑  作者: Mango

Laravel 模型设置字段

在 Laravel 中,模型是与数据表交互的主要方式。当你创建一个模型时,它将尝试自动推断与数据表的对应关系。但是,在许多情况下,你需要手动指定模型中的数据字段。在本文中,我们将介绍如何在 Laravel 模型中设置字段。

创建模型

首先,我们需要创建一个模型。Laravel 提供了 Artisan 命令来自动生成模型,如下所示:

php artisan make:model User

这将创建一个 User 模型,对应 users 数据表。

修改字段
白名单

Laravel 提供了 fillable 属性来定义模型中可被批量赋值的字段。默认情况下,所有字段都是不可批量赋值的。例如,如果你想允许 User 模型中的 nameemail 字段被批量赋值,可以这样定义:

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 模型中设置字段的方法。你可以使用白名单和黑名单来控制模型中哪些字段可以被批量赋值,并使用访问器和修改器来自定义模型中字段的值。掌握这些方法可以帮助你更好地管理数据表,使应用程序更加可靠。