概述
Eloquent 是一个 ActiveRecord ORM 框架,ORM 全称是 Object Relational Mapping,意为对象关系映射,用于实现面向对象编程语言里不同类型系统的数据之间的转换,简单来说,它会构建类与数据表之间的映射关系,从而建立起一个可在编程语言里使用的「虚拟对象数据库」。「ActiveRecord」是 ORM 的一种实现模式,Eloquent 则是 Laravel 版的「ActiveRecord」。
一个 Eloquent 模型类映射一张数据表,通过模型类提供的方法,你可以获取其映射的数据表的所有记录,也可以获取单条记录,还可以创建、更新和删除对应数据表记录,而这一切都不需要你编写任何 SQL 语句、或者构建查询构建器即可完成。
Eloquent 专注于简单,并且和其他框架一样遵循「约定优于配置」,从而允许你通过最少的代码构建功能强大的模型类。
你可能对「约定优于配置」这个理念不太了解,看几个例子就明白了,比如模型类映射的表名、主键、关联关系、日期格式系统都约定好了,一般而言,遵循这个约定,你就可以不用做任何配置、编写任何额外代码即可完成功能,结合我们平时怎么创建使用模型类的,就可以更好的理解这一理念了。下面我们将模型类定义的时候还会强调这一点。
模型类定义
使用模型类之前,需要在数据库有对应的数据表,因为模型类就是数据表在面向对象编程语言中的映射。比如我们前面几篇教程中用到的 User
模型和 Post
模型都是这样,要创建一个模型类,需要使用 make:model
命令:
php artisan make:model Post
注:如果对应的数据表尚未创建,你还可以在创建模型类的同时创建对应的数据库迁移文件,通过
php artisan make:model Post -m
即可。如果你想将模型类创建到app/Models
目录下,可以这么运行上述命令php artisan make:model Models/Post
。
接下来我们就是 posts
表映射的 Post
模型为例,来看看默认都有哪些约定。新生成的 Post
模型类如下:
<?php namespace App;use Illuminate\Database\Eloquent\Model;class Post extends Model{
//
}
里面什么东西都没有,但是我们就可以通过它完成数据表记录的增删改查操作了,怎么做到的?这就是「约定优于配置」的功劳了。下面我们就来看看这些默认的约定。
表名
Eloquent 约定模型类映射表名是将类名由驼峰格式转化为小写+下划线(含多个单词的话),最后将其转化为复数形式,比如 Post
对应表名是 posts
、PostTag
对应表名是 post_tags
等等。当然,如果你不想遵循这个系统约定的规则,也可以通过手动设置模型类属性的方式进行自定义,例如:
protected $table = 'articles';
主键
Eloquent 默认假设每张数据表都有一个整型的自增主键,其字段名为 id
,如果你的数据表主键名不是 id
,可以通过 $primaryKey
属性来指定:
protected $primaryKey = 'post_id';
如果主键不是