EloquentORM 模型定义

Laravel集成了EloquentORM框架,虽然使用它并不是必须的,但实际上几乎在每个CRUD项目中ORM都会用到。这篇笔记我们来学习一下这个ORM框架。

一些准备工作

使用ORM前,需要在config/database.php中正确的配置数据库,这在之前的章节已经介绍过,参考PHP网络应用开发/Laravel/10-数据库。另外,我们还需要先设计并创建好数据表。Laravel的模型并不需要手动编写字段,它能够从数据表中自动读取字段,但前提是数据表已经创建好。

创建模型

使用如下命令能够创建一个数据模型。

php artisan make:model Student

创建的数据模型文件,默认在项目根目录app文件夹下,模型名中也可以指定更深层次的命名空间,默认生成的模型代码例子如下。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //
}

我们可以发现,数据模型都是继承Model类的。

模型配置

数据表名

protected $table = 't_student';

$table可以指定数据表名,其默认值为类名的蛇形命名,比如ProductType,对应的表名为product_type

主键

protected $primaryKey = 'student_id';

$primaryKey可以指定表的主键,默认名为id

巨坑注意primaryKeyK为大写,写错会出现诡异问题,而且极难发现!!

public $incrementing = true;

$incrementing可以指定整数主键自增,默认值为true。如果你的主键是非自增的,或非数字主键,需要指定其为false

protected $keyType = 'string';

$keyType指定主键的数据类型,如果你的主键非整形,则需要指定该属性。

注:EloquentORM不支持联合主键。

时间戳

public $timestamps = false;

$timestamps用来配置数据表记录的时间戳功能。该功能需要在表中存在create_atupdate_at两个字段,用来存储数据记录创建和最后更新的时间戳,并由ORM框架自动维护。如果不使用该功能,需要指定$timestampsfalse

protected $dateFormat = 'Y-m-d H:i:s';

$dateFormat用于配置时间戳的格式,默认为Unix时间戳。

const CREATED_AT = 'create_time';
const UPDATED_AT = 'last_modified_time';

如果需要改变两个时间戳字段的默认名字,可以指定CREATED_ATUPDATED_AT这两个常量。

字段默认值

protected $attributes = [
    'cust_info_create_time' => '1999-12-31 00:00:00',
];

$attributes可以指定数据模型关联表字段的默认值。关联数组的键是字段名,值是要插入的字段值。

实例化模型

下面例子代码中,实例化了一个数据模型Student并保存。

数据表例子如下。

CREATE TABLE `t_student`  (
  `student_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名字',
  `age` int(11) NOT NULL COMMENT '年龄',
  `grade` int(11) NOT NULL COMMENT '年级',
  PRIMARY KEY (`student_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

数据模型Student.php代码如下。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    protected $table = 't_student';
    protected $primaryKey = 'student_id';
    public $incrementing = true;
    public $timestamps = false;
}

ORM操作语句例子如下。

$student = new Student();
$student->name = 'Lucy';
$student->age = 18;
$student->grade = 4;
$student->save();

实际上,我们的数据模型定义中,没有nameage等字段,这些都是EloquentORM根据数据表自动创建的。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap