PHPackages                             hbclare/model-helper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. hbclare/model-helper

ActiveLibrary

hbclare/model-helper
====================

Eloquent Atom Cache Layer

v1.2.23(4y ago)234917[1 PRs](https://github.com/laravelSTHelper/ModelHelper/pulls)MITPHP

Since Apr 5Pushed 4y ago6 watchersCompare

[ Source](https://github.com/laravelSTHelper/ModelHelper)[ Packagist](https://packagist.org/packages/hbclare/model-helper)[ RSS](/packages/hbclare-model-helper/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (4)Versions (42)Used By (0)

ModelHelper
===========

[](#modelhelper)

对laravel Eloquent OMR 的一层带缓存的封装

版本时间说明V1.02016-11-301.增加了分页自动缓存 2.增加了hasOne,hasMany自动缓存（非with） 3. 修改了，model event 无法执行的bug 4. 修改了with预加载无法执行的bugV1.12017-4-26修改Model生成时的模板，支持idehelper，实现phpstrom的代码自动补全V1.22017-5-23对缓存的值做了优化，由缓存对象改为缓存数组，可以提升约30%的效率，减少70%的redis内网带宽开销。V1.2.22017-6-6增加缓存版本控制，平滑升级，不用清理缓存。V1.2.72017-7-19在读缓存的时候，增加对象复用，避免一组数据，对象多次创建V1.2.82017-9-19修正一个bug：setcaches方法生成的缓存未增加版本控制V1.2.102017-11-10修正一个bug：delCleanCache 方法,主动增加fillable中设置的所有字段，保证设置过的缓存全部自动清理V1.2.132017-11-13修复一个bug: 自动化缓存，如果遇到空值，依旧写入缓存bug修正V1.2.142018-3-28formatWhere增加null，notnull支持；增加whereUpdate方法，以支持乐观锁；laravel5.5 兼容验证V1.2.152018-5-25修正PHP7.2下，where为空时，whereformat报错的bugV1.2.142018-7-25having 条件下 bug 修正V1.2.172018-11-7修改一个在极大数组循环里使用model方法时，内存泄露的bugV1.2.182018-11-13修正v1.2.7中，不兼容php7.2的bugV1.2.192018-12-10不兼容php7.2的bug继续修正V1.2.222021-03-16修正不能触发模型无法触发事件的bug注意
--

[](#注意)

1. 不能使用Eloquent ORM 中的软删除方法（use SoftDeletes）。这个设计与原子化缓存的思想设计有冲突
2. 技术交流，请加qq群:370087262

封装的目的
-----

[](#封装的目的)

1. 在laravel的使用过程中，发现很多对model层缓存的透明化封装，而这些封装主要是对所有的sql语句进行了缓存，如果有数据的更新或者删除，则对数据进行了全部删除，做的好一些的，就是对表级数据，进行了删除。 在实际使用过程中，特别是web类，面向用户的操作，更多的只是简单的select操作，如果我们将这些简单的select单条查询存入缓存，讲连表操作改成 select一张表中的数据list，然后foreach 该list，循环取另一张表的info类型，我们可以避免80%以上的连表操作。 但是，这种做法，对缓存控制要求就很高了，对于缓存脏数据的清理，我们希望更精准，谁脏了，就干掉谁，而不是批量处理的做法，封装了此扩展。
2. 自动缓存包含精准缓存的缓存删除操作。

> 什么是原子化缓存? 对应于原子化操作的定义，对一条不可在细分数据的缓存就是原子化缓存，通俗点说，就是对表的行数据的缓存

主要功能
----

[](#主要功能)

1. 自动原子化缓存（行数据缓存）
2. 自动分页缓存
3. hasOne/hasMany 时，外键自动缓存
4. 常用方法封装

用法
--

[](#用法)

#### 1.安装

[](#1安装)

> 1. composer require hbclare/model-helper:dev-master
> 2. 修改comfig/app.php, 将'Eloquent' =&gt; 'Illuminate\\Database\\Eloquent\\Model', 改为 'Eloquent' =&gt; 'Hbclare\\ModelHelper\\Model',
> 3. 在porviders里面，增加 'Hbclare\\ModelHelper\\ModelHelperServiceProvider',

#### 2.phpstrom的idehelper生成

[](#2phpstrom的idehelper生成)

> 1.查看是否存在`app/ide-helper.php`文件，不存在则执行

```
php7 artisan vendor:publish --provider="Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider" --tag=config
```

> 2. 打开文件`config\ide-helper.php`

```
'Eloquent' => array('Illuminate\Database\Eloquent\Builder', 'Illuminate\Database\Query\Builder'),
#修改为
'Eloquent' => array('Illuminate\Database\Eloquent\Builder', 'Illuminate\Database\Query\Builder', 'Hbclare\ModelHelper\HelperQueryBuilder'),

```

> 3. 执行命令，生成\_ide\_helper.php文件

```
php7 artisan ide-helper:generate

```

#### 3.artisan方法，生成程序

[](#3artisan方法生成程序)

假设我们有一个user表

字段说明id主键idpassport登陆账号password登陆密码nickname昵称......```
php artisan make:eachmodel Models/User

```

会在/app/Models 下生成User的model类

```
php artisan make:repository Repository/UserRepository

```

会在/app/Repository 下生成UserRepository类 同时会在 /app/RepositoryInterface 目录下，生成UserRepositoryInterface类

#### 4.在model中，缓存的使用

[](#4在model中缓存的使用)

```
