Laravel Eloquent模型的定义和使用(附带实例)
Laravel 框架内置了一个名称为 Eloquent 的模型组件,用于实现 ORM(对象关系映射)。
ORM 可以简单理解为将数据表(关系)映射为对象,通过表的对象对表进行操作。从代码层面来说,Eloquent 采用了目前在大部分框架中非常流行的 Active Record(活动记录)模式,实现了一种简单、美观的数据库操作方式。
本节将对 Eloquent 模型的使用进行详细讲解。
使用 php artisan 命令可以自动创建模型,具体命令如下:
在模型类中还可以添加其他可选的属性,具体属性说明如下:
由于 $timestamps 属性默认是开启的,我们需要为 student 表添加 created_at 和 updated_at 字段。添加这两个字段的具体 SQL 语句如下:
如果不想添加这两个字段,也可以在模型类中关闭自动维护时间戳,具体代码如下:
为了在控制器中使用模型,需要先在控制器文件中引入模型的命名空间。例如,在控制器中引入 Student 模型类的命名空间,示例代码如下:
为了保证能够在控制器中通过模型访问数据库,需要修改 .env 文件中的数据库相关的配置,具体配置如下:
ORM 可以简单理解为将数据表(关系)映射为对象,通过表的对象对表进行操作。从代码层面来说,Eloquent 采用了目前在大部分框架中非常流行的 Active Record(活动记录)模式,实现了一种简单、美观的数据库操作方式。
本节将对 Eloquent 模型的使用进行详细讲解。
Laravel定义模型
在 Laravel 中,每张数据表都对应一个模型。利用模型可以实现对数据表数据的查询、添加、修改、删除等操作。模型文件默认保存在 app\Models 目录下,文件命名形式为“表名(首字母大写).php”,如 Student.php、User.php。使用 php artisan 命令可以自动创建模型,具体命令如下:
php artisan make:model 模型名例如,为数据库中的 student 表创建一个 Student 模型,可以执行如下命令:
php artisan make:model Student上述命令执行后,会自动创建 app\Models\Student.php 文件,该文件的代码如下:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Student extends Model { use HasFactory; }在默认情况下,Laravel 会自动将 Student 模型名转换为表名,并使用复数形式,即 students。如果数据表的名称没有使用复数形式,需要在模型类中使用 $table 属性指定表名,示例代码如下:
class Student extends Model { protected $table = 'student'; }需要注意的是,上述指定的表名,是不包含前缀的表名。这里所说的前缀是指在配置文件 config\database.php 中通过 prefix 为数据表添加前缀,默认不添加前缀。如果将 prefix 设为 pre_,则 Student 模型对应的表名为 pre_student。
在模型类中还可以添加其他可选的属性,具体属性说明如下:
- $primaryKey:用于设置主键的名称,默认值为 id。由于模型的一些方法需要通过主键才能实现,如果主键名称有误,会导致程序出错;
- $timestamps:是否自动维护时间戳,默认为 true。当设为 true 时,模型会自动维护表中的 created_at(创建时间)和 updated_at(更新时间)字段;
- $fillable:表示允许某些字段可以被添加或修改,格式为一维数组形式。当使用模型的create()方法添加数据时,需要在 $fillable 数组中填写字段;
- $guarded:表示禁止某些字段被添加或修改,与 $fillable 只能二选一。
由于 $timestamps 属性默认是开启的,我们需要为 student 表添加 created_at 和 updated_at 字段。添加这两个字段的具体 SQL 语句如下:
ALTER TABLE student ADD created_at TIMESTAMP NULL DEFAULT NULL; ALTER TABLE student ADD updated_at TIMESTAMP NULL DEFAULT NULL;
如果不想添加这两个字段,也可以在模型类中关闭自动维护时间戳,具体代码如下:
public $timestamps = false;
在控制器中使用模型
模型的使用方式有两种,一种是静态调用,另一种是实例化模型,具体代码如下:// 方式1:静态调用 Student::get(); // 方式2:实例化模型 $student = new Student(); $student->get();对于上述两种方式,如果只使用模型类的内置方法,则无须实例化模型,使用方式 1 更加简单;而如果需要用到必须实例化才能使用的方法,则应使用方式 2。
为了在控制器中使用模型,需要先在控制器文件中引入模型的命名空间。例如,在控制器中引入 Student 模型类的命名空间,示例代码如下:
use App\Models\Student;添加上述代码后,就可以在控制器中使用 Student 模型了。
为了保证能够在控制器中通过模型访问数据库,需要修改 .env 文件中的数据库相关的配置,具体配置如下:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=myframe DB_USERNAME=root DB_PASSWORD=123456上述配置用于设置数据库的连接信息:
- DB_CONNECTION 表示连接 MySQL 数据库;
- DB_HOST 设置为 127.0.0.1表示连接本地的数据库;
- DB_PORT=3306 表示端口号是 3306;
- DB_DATABASE=myframe 表示连接数据库 myframe;
- DB_USERNAME=root 表示连接 MySQL 数据库的用户名是 root;
- DB_PASSWORD=123456 表示连接 MySQL 数据库的密码是 123456。