Laravel 包含了 Eloquent,这是一个对象关系映射器(ORM),使与数据库的交互变得很愉快。使用 Eloquent 时,每个数据库表都有一个对应的「模型」,用于与该表进行交互。除了从数据库表中检索记录外,Eloquent 模型还允许您从表中插入,更新和删除记录。

前面已经创建了一张专栏数据表,现在要添加对应的 Eloquent 模型。

移除默认模型

Laravel 项目的模型文件都存放在 app/Models目录下,Laravel 项目默认生成了 User.php文件,是用户表对应都模型文件,如前面所说的一样,在我的博客项目中也用不到,所以也移除:

  1. rm app/Models/User.php

生成专栏模型

运行如下命令生成模型文件:

php artisan make:model Column

打开生成的Column.php模型文件看看默认代码:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Column extends Model
{
  use HasFactory;
}

在该文件中,Eloquent Column 模型默认情况下会使用类的「下划线命名法」与「复数形式名称」来作为数据表的名称生成规则,如:Column 数据模型类对应 columns 数据表。

模型通常位于 app\Models目录中,并继承 Illuminate\Database\Eloquent\Model 类。

class Column extends Model
{
  use HasFactory;
}

HasFactory 是模型工厂相关功能的引用。

添加$fillabe属性

使用 make:model 命令生成的所有 Eloquent 模型都受到保护,免受批量分配漏洞的影响。

当用户传递一个意外的 HTTP 请求字段并且该字段更改了你的数据库中的一个字段,而你没有预料到时,就会出现批量分配漏洞。 例如,恶意用户可能通过 HTTP 请求发送 is_admin 参数,然后将其传递给模型的 create 方法,从而允许用户将自己升级为管理员。

因此,应该定义要使哪些模型属性可批量分配。可以使用模型上的 $fillable 属性来执行此操作。现在要让Column模型的 name属性可以批量赋值:

protected $fillable = [
  'name'
];

完整的 Column模型的内容如下:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Column extends Model
{
    use HasFactory;

    protected $fillable = [
        'name'
    ];
}