eghamat24/database-repository

v1.3.5 2024-04-14 16:20 UTC

README

安装

使用以下命令将此包添加到composer开发需求中。

composer require eghamat24/database-repository --dev 

设置Laravel仓储

然后在控制台中运行以下命令,将必要的资源发布到您的项目目录。

php artisan vendor:publish --tag=database-repository-config

设置Lumen仓储

导航到bootstrap文件夹中的app.php,并在服务提供程序注册后添加以下行

// snip
if ($app->environment('local', 'testing')) {
    $app->register(Eghamat24\DatabaseRepository\DatabaseRepositoryServiceProvider::class);
}
// snip

repository.php 复制到项目根目录下的项目配置文件夹。

注意:确保在更改后运行composer dump-autoload

用法

要轻松使用此包,您可以运行以下命令。它将为用户表创建所有必要的组件,例如Entity、IRepository、Repository、MySqlRepository、RedisRepository、Resource和Factory。

php artisan repository:make-all --table_names=users --strategy_name=QueryCacheStrategy

artisan命令列表

选项解释

  • -f|--force: 强制命令覆盖现有文件。
  • -d|--delete: 删除已创建的文件。
  • -k|--foreign-keys: 尝试检测表的键。
  • -g|--add-to-git: 将创建的文件添加到git仓库。
  • -a|--all-tables: 使用所有现有表。
  • --table_names=: 添加表名,用逗号分隔名称。
  • --selected_db= : 使用MysqlRedis,如果没有发送,则从config/repository.php返回值
  • --strategy_name= : 根据您选择的策略添加Redis仓储的trait

示例1. 为名为'users'的表创建一个新的Entity。

php artisan repository:make-entity users

示例2. 创建两个名为'users'和'customers'的表的必要类,并启用外键选项。

php artisan repository:make-all --table_names=users,customers -k

示例3. 为所有表创建必要类,并启用外键选项(这可以用于新项目)。

php artisan repository:make-all -a -k

缓存策略

我们根据记录数量和变更频率创建了一些缓存数据策略

SingleKeyCacheStrategy

SingleKeyCacheStrategy非常适合行数很少的表,例如少于50条记录。此策略创建一个缓存键并将所有数据存储在它上面。然后,当应用查询数据时,它会遍历数据并返回结果。

此策略有一个缓存键,每当有变化时都会清除所有缓存数据。这确保了数据始终是最新的且有效的。

QueryCacheStrategy

QueryCacheStrategy适用于变更频率低且记录数量不多的表。例如,如果表有少于10,000行,或者行数超过10,000但查询不独特且有类似的查询,则此策略效果良好。

此策略为仓储的每个缓存分配一个标签,每当有变化时都会清除所有缓存数据。这确保了数据始终是最新的且有效的。

TemporaryCacheStrategy

TemporaryCacheStrategy在处理大量或多样化的数据时非常有用,用户可以容忍数据更新的延迟。我们缓存每个请求,并将不至关重要的更改延迟到实时反映。例如,如果我们有一个帖子并编辑其内容,我们可以缓存旧版本直到缓存过期。我们根据用户可以接受的最大延迟为每个数据项设置缓存过期时间。这样,我们使用此策略临时缓存数据。

ClearableTemporaryCacheStrategy

有时,当发生一些关键变更时,我们需要清除临时缓存中的数据。可清除临时缓存策略(ClearableTemporaryCacheStrategy)适用于这些场景。

php artisan repository:make-all --table_names=users --strategy_name=QueryCacheStrategy