Laravel 拥有两个功能强大的功能来执行数据库操作:Query Builder(查询构造器)和 Eloquent ORM。在前面的文章中,我演示了 Query Builder 的使用,下面我来介绍下后者:Eloquent ORM。
六、Eloquent ORM 基础
1,什么是 Eloquent ORM?
Laravel 内置的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的模型(Model),我们通过模型类可以对数据表进行查询、插入、更新、删除等操作。
2,创建模型
(1)在使用 Eloquent ORM 之前,我们需要在项目中先配置一下数据库连接,具体可以参考我之前的这篇文章:
(2)假设我们有个用户表(Users),结构如下:
(3)接着我们就要创建对应的模型(User.php)用来对这张表进行操作。这里我们把模型都放在 app/Models 下。
(4)User.php 里面内容很简单,我们只需要让模型类继承 Model,后面就可以使用了。不需要指定关联的表名,也不需要定义模型的字段属性。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
}
3,手动指定关联的表名
(1)前面我们并没有告诉 User 模型会使用哪个数据库表。此时系统会默认自动对应名称为「类名称的小写复数形态」的数据库表。所以,在上面的例子中, Eloquent 会假设 User 模型将把数据存在 users 数据库表。
(2)我们也可以在模型中定义 $table 属性来指定自定义的表名:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
/**
* 关联到模型的数据表
*
* @var string
*/
protected $table = 'my_users';
}
4,手动指定主键(Primary Keys)
Eloquent 默认每张表的主键名为 id,我们可以在模型中定义 $primaryKey 属性来指定其他的字段:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
/**
* 指定主键字段
*
* @var string
*/
protected $primaryKey = 'uid';
}
5,时间戳(Timestamps)
(1)默认情况下,Laravel 会认为你的表中自带有 created_at 和 updated_at 这两个字段,并会在生成数据的时候自动填充。
(2)如果我们的表中没有这两个字段或者不想自动管理它们,可以将其关掉:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
public $timestamps = false;
}
(3)我们还可以修改时间戳在数据库中的存储格式(默认从年存到秒),还有从数据库中读出来的显示格式:
具体时间格式有哪些可以参考 PHP 官方手册:https://www.php.net/manual/en/datetime.createfromformat.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
// 时间戳格式化形式
protected $dateFormat = 'U';
}
6,指定数据库连接
默认情况下,所有的 Eloquent 模型使用应用配置中的默认数据库连接。如果我们想要为模型指定不同的连接,可以通过 $connection 属性来设置(当然,这个数据库也必须事先在 config 里面配置过):
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
// 指定这个模型对应的数据库连接
protected $connection = 'connection-name';
}