Laravel 包含了 Eloquent,这是一个对象关系映射器(ORM),使与数据库的交互变得很愉快。使用 Eloquent 时,每个数据库表都有一个对应的「模型」,用于与该表进行交互。除了从数据库表中检索记录外,Eloquent 模型还允许您从表中插入,更新和删除记录。
前面已经创建了一张专栏数据表,现在要添加对应的 Eloquent 模型。
移除默认模型
Laravel 项目的模型文件都存放在 app/Models
目录下,Laravel 项目默认生成了 User.php
文件,是用户表对应都模型文件,如前面所说的一样,在我的博客项目中也用不到,所以也移除:
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'
];
}