Eloquent 模型-注,既 ORM 方法索引
Eloquent模型-注,既ORM方法索引
作者:韩忠康
原文:https://learnku.com/docs/laravel/5.5/eloquent
中文(laravel-china翻译):https://learnku.com/docs/laravel/5.5/eloqu...
Laravel版本:5.5
本文是Laravel文档中Eloquent ORM章节的解析,建议与文档对照阅读。
[TOC]
# 概述
# 基础操作索引
# 模型关联
# 访问器&修改器
# 序列化
# 查询作用域
# 事件
概述
ORM,对象关系映射,使用OOP思想和语法操作关系型数据库的解决方案。Eloquent,就是Laravel使用的漂亮、简洁的 ActiveRecord 实现来和数据库进行交互的ORM。映射的关系为:
关系 | 映射为 | 对象 |
---|---|---|
表 | 映射为 | 模型类 |
记录 | 映射为 | 模型对象 |
字段 | 映射为 | 模型对象属性 |
关联 | 映射为 | 模型关联 |
也就是说,如果需要操作表,则需要使用模型类操作,如果需要操作记录,则需要使用模型对象操作,如果需要操作字段,则通过模型对象属性完成,如果操作记录之间关联,则通过模型关联实现。以上就是典型的ORM,对象关系映射实现。
本文,总结Eloquent操作。
以模型开始的构建器查询,查询结果是模型对象或者模型对象的集合。对应的查询构建器,查询的结果是stdClass对象或者stdClass对象集合。
利用模型完成更新,可以利用模型完善功能,例如,时间戳,软删除,修改器,访问其,事件等。
基础操作索引
操作 | 说明 | 详细 |
---|---|---|
>php artisan make:model Model | 定义模型命令 | 详细 |
约定 | ||
$model->table | 指定表名,可选。默认ModelName对应table_name | 详细 |
$model->primaryKey | 指定主键字段,可选。默认id | 详细 |
$model->incrementing | 指定主键字段是否为自增,可选。默认true | 详细 |
$model->timestamps | 指定是否维护created_at和updated_at时间戳字段,可选。默认true | 详细 |
$model->dateFormat | 指定时间戳字段格式,可选 | 详细 |
Model::CREATED_AT | 指定创建时间字段,可选。默认为created_at | 详细 |
Model::UPDATED_AT | 指定更新时间字段,可选。默认为updated_at | 详细 |
$model->connection | 指定使用的数据库连接,可选。默认由配置文件定 | 详细 |
CRUD | ||
Model::all() | 查询全部 | 详细 |
Model::查询构造方法 | 每个Eloquent模型都可以当作一个查询构造器 | 详细 |
Model::chunk() | 分块结果查询, | 详细 |
Model::cursor() | 游标获取,一条条的获取。构建器也有该方法 | 详细 |
Model::find() | 依据主键获取,支持主键数组和单个主键 | 详细 |
Model::findOrFail() | 利用主键或主键主组获取,失败抛出异常,未捕获,响应404 | 详细 |
Model::firstOrFail() | 获取第一条,失败抛出异常,未捕获,响应404,查询构建器也有该方法 | 详细 |
(new Model())->save() | 插入,实例化模型对象,save()存储 | 详细 |
Model::find()->save() | 更新,获取已存在模型对象,save()存储 | 详细 |
Model::where()->update() | 更新,条件更新 | 详细 |
$model->fill() | 批量填充,需要配置$fillable或$guarded | 详细 |
Model::create() | 创建,创建模型对象,自动入库,参数为关联数组 | 详细 |
Model::::firstOrCreate() | 未找到,则创建模型对象,参数为关联数组 | 详细 |
Model::::firstOrNew() | 未找到,则实例化新的模型对象,参数为关联数组 | 详细 |
Model::::updateOrCreate() | 存在则更新,否则创建,参数为关联数组 | 详细 |
$model->delete() | 删除 | 详细 |
Model::destroy() | 通过主键或主键数组删除 | 详细 |
Model {use SoftDeletes;} | 支持软删除 | 详细 |
$model->trashed() | 判断该模型是否被软删除 | 详细 |
Model::withTrashed() | 查询时包含被软删除的,支持关联 | 详细 |
Model::onlyTrashed() | 查询时仅包含被软删除的 | 详细 |
$model->restore() | 恢复被软删除的,支持关联 | 详细 |
$model->forceDelete() | 强制删除 | 详细 |
模型关联
操作 | 说明 | 详细 |
---|---|---|
return $this->hasOne('Model', 'foreign_key', 'local_key') | 1:1关联,逻辑上表示拥有一个 | 详细 |
return $this->hasMany('Model', 'foreign_key', 'local_key') | 1:n关联,逻辑上表示拥有多个 | 详细 |
return $this->belongsTo('Model', 'foreign_key', 'local_key') | 1:n关联,逻辑上表示属于某个,用于1:1, 1:n的反向逻辑 | 详细 |
return $this->belongsToMany('Model', $table, $foreignPivotKey, $relatedPivotKey, $parentKey, $relatedKey, $relation) | m:n关联,多对多关联。 | 详细 |
return $this->hasManyThrough($related, $through, $firstKey, $secondKey, $localKey, $secondLocalKey) | 远层一对多。 | 详细 |
$model->pivot | 多对多关联中间表获取 | 详细 |
$model->relateAttribute | 关联属性,用于获取关联数据 | 详细 |
$model->relateMethod() | 关联方法,用于在关联上,完成其他业务逻辑 | 详细 |
Model::has() | 存在关联查询 | 详细 |
Model::doesntHave() | 不存在关联查询 | 详细 |
Model::whereHas() | 条件存在关联查询 | 详细 |
Model::whereDoesntHave() | 条件不存在关联查询 | 详细 |
Model::withCount() | 统计关联查询,支持统计一个或多个关联,支持过滤 | 详细 |
Model::with() | 预加载关联查询,支持一个或多个,支持设置过滤 | 详细 |
$collection->load() | 延迟预加载关联查询,支持一个或多个,支持设置过滤 | 详细 |
$model->relateMethod()->save($relateModel) | 关联存储,多对多关联时支持设置中间表,拥有关联更新 | 详细 |
$model->relateMethod()->saveMany([$relateModel, ...]) | 关联存储,多个,拥有关联更新 | 详细 |
$model->relateMethod()->create([assocArray]) | 关联存储,支持关联数组,拥有关联更新 | 详细 |
$model->relateMethod()->createMany([[assocArray], ...]) | 关联存储,支持关联数组,拥有关联更新 | 详细 |
$model->relateMethod()->associate($relateModel) | 关联存储,属于关联更新 | 详细 |
$model->relateMethod()->dissociate() | 取消关联,属于关联更新 | 详细 |
$model->relateMethod()->attach(relate-id) | 附加关联,支持数组,支持设置关联字段,多对多关联更新 | 详细 |
$model->relateMethod()->detach(relate-id) | 解除关联,支持数组,多对多关联更新 | 详细 |
$model->relateMethod()->sync() | 同步关联,支持数组,支持设置其他字段,多对多关联更新 | 详细 |
$model->relateMethod()->sync() | 同步关联,排除移除支持,多对多关联更新 | 详细 |
$model->relateMethod()->updateExistingPivot() | 更新已存在关联中间表属性,多对多关联更新 | 详细 |
$model->touches | 更新属于关系的关联模型时间戳,属于关联更新 | 详细 |
操作表示说明
以>开头,表示命令
$model->property,表示属性
$model->method(),表示对象方法
Model::$property,表示静态属性
Model::method(),表示静态方法
Model::const,表示常量
详细引用laravel-china。如有侵权,请告知。
访问器&修改器
未完待续...
序列化
未完待续...
查询作用域
未完待续...
事件
未完待续...
结语
ORM会不会慢?执行肯定比SQL构建要慢。但是开发效率和语法语义要有优势。
更新内容,请关注微信公众号,小韩说理:
本作品采用《CC 协议》,转载必须注明作者和本文链接
谢谢分享