nanvaie/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

用法

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

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

艺术家的命令列表

选项说明

  • -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仓库添加一个特质。

示例1:为名为'users'的表创建一个新实体。

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行,或者如果行数超过这个数字但查询不是非常独特且有相似的查询,这个策略效果很好。

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

TemporaryCacheStrategy

当数据量较大或数据种类较多,并且用户可以容忍一定的数据更新延迟时,临时缓存策略(TemporaryCacheStrategy)非常有用。我们会缓存每一个请求,并将非关键性的更改延迟反映到实时数据中。例如,如果我们有一个帖子,我们编辑其内容,我们可以缓存旧版本直到缓存过期。我们根据用户能够接受的最大延迟设置每个数据项的缓存过期时间。这样,我们使用这种策略临时缓存数据。

可清除的临时缓存策略(ClearableTemporaryCacheStrategy)

有时,当发生一些关键性更改时,我们需要从临时缓存中清除数据。可清除的临时缓存策略适用于这些情况。

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