larastash/options

基于数据库的Laravel全局键值存储。

1.0.2 2023-07-16 11:06 UTC

This package is auto-updated.

Last update: 2024-09-18 16:52:55 UTC


README

Options类提供了一个方便的方法与Laravel应用程序中的选项值交互。

它允许您设置、获取、删除和检查选项的存在。该类还包括管理先前检索的选项值的方法,并为选项模型提供查询构建器。

要求

  • Laravel ^10(其他版本未测试);
  • PHP ^8.1;

为了支持数据库中的JSON字段,请确保您选择的数据库满足以下要求

  • MySQL:使用MySQL版本5.7.8或更高版本。从MySQL 5.7.8版本开始引入了JSON字段支持;
  • MariaDB:使用MariaDB版本10.2或更高版本。从MariaDB 10.2版本开始引入了JSON字段支持;
  • PostgreSQL:使用PostgreSQL版本9.2或更高版本。从PostgreSQL 9.2版本开始引入了JSON字段支持;
  • SQLite:使用SQLite版本3.9.0或更高版本。从SQLite 3.9.0版本开始添加了JSON支持和函数;
  • SQL Server:使用SQL Server 2016或更高版本。从SQL Server 2016版本开始引入了JSON支持;
  • Oracle数据库:使用Oracle数据库12c Release 2(12.2)或更高版本。在Oracle数据库12c Release 2中添加了JSON支持;

安装

您可以使用Composer安装它

composer require larastash/options

运行数据库迁移

php artisan migrate

✨ 开始工作,您完成了!

使用方法

要使用Options类,请确保将其导入到您的PHP文件中

use Larastash\Options\Option;

或从应用容器中获取Larastash\Options\Option单例类

$option = app('option');
$option = app(Option::class);

此外,您还可以使用option()辅助函数。

设置选项

您可以使用set方法设置选项的值

Option::set('key', 'value');

此方法将更新指定键的选项值。如果选项不存在,则创建它。

您还可以指定选项的存活时间(TTL)。TTL确定选项将被缓存的时长。如果指定了TTL,则选项将在数据库持久化之外存储在缓存中

// Set an option with a TTL of 1 hour
Option::set('key', 'value', 3600);
Option::set('key', 'value', now()->addHour());

获取选项

要检索选项的值,请使用get()方法

$value = Option::get('key');

您还可以指定如果未找到选项则返回的默认值

$value = Option::get('key', 'default');

如果指定了TTL并且选项在缓存中找到,则返回缓存值。否则,将从数据库中检索选项。

// Retrived value will be cached for 1 hour
$value = Option::get('key', 'default', 3600);
$value = Option::get('key', 'default', now()->addHour());

如果TTL不为null,则从数据库中获取新鲜值,忽略缓存值。

删除选项

您可以使用remove方法删除选项

Option::remove('key');

这将从数据库中删除选项,如果存在,则从缓存中删除它。

检查选项是否存在

您可以使用exists()方法检查选项是否存在

if (Option::exists('key')) {
    // Option exists
} else {
    // Option does not exist
}

exists方法如果指定键的选项存在于数据库中,则返回true;否则,返回false

获取所有选项值

要检索所有选项值,您可以使用all方法

$options = Option::all();

all方法返回所有选项值的Illuminate\Database\Eloquent\Collection

查询选项模型

您可以使用query方法访问选项模型的查询构建器

$query = Option::query();

query 方法返回一个 Illuminate\Database\Eloquent\Builder 类的实例,可以用于在选项模型上构建自定义查询。

高级用法

如果您需要更高级的查询功能,可以使用 query() 方法获取选项模型的查询构建器实例。这允许您在选项模型上执行复杂的数据库查询。

$query = Option::query();
$query->where('key', 'like', 'prefix%');
$options = $query->get();

此示例检索所有键以特定前缀开头的选项。

助手函数

option()

option 函数提供了一种方便的方式与 Laravel 应用程序中的选项值交互。它作为 Options 类方法的包装器,简化了选项的检索和设置。

参数

  • $key (字符串|数组|null):要检索的选项的键,或者包含键和值的数组。如果设置为 null,将返回 Option 类的实例。
  • $default (混合类型):(可选) 如果选项不存在则返回的默认值。此参数仅在检索选项值时使用。
  • $ttl (DateInterval|DateTimeInterface|int|null):(可选) 如果选项不存在则返回的默认值。此参数仅在检索选项值时使用。

返回值

如果提供了键,函数将返回指定键的选项值。

如果提供了数组,则设置指定键的选项值。

如果没有提供任何参数,则返回 Option 类的实例。

用法示例

获取选项

$value = option('key', 'default value');
$value = option('key', 'default value', ttl: 3600);
$value = option('key', 'default value', ttl: now()->addHour());

此代码检索指定键的选项值。如果选项不存在,则返回提供的默认值。

设置选项

option(['key' => 'new value']);
option(['key' => 'new value'], ttl: 3600);
option(['key' => 'new value'], ttl: now()->addHour());

// or as array list
option(['key', 'new value']);
option(['key', 'new value'], ttl: 3600);
option(['key', 'new value'], ttl: now()->addHour());

此代码设置指定键的选项值。如果选项不存在,则将其创建。

访问 Option

$option = option();

option()->set(...);
option()->get(...);
option()->remove(...);
option()->exists(...);
option()->query(...);

// and etc...

此代码返回 Option 类的实例,允许您执行高级操作。

测试

$ composer test

贡献

如果您发现任何问题或有改进建议,请随时通过创建拉取请求或提交问题来贡献。

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅许可证文件