rennokki/eloquent-settings

Eloquent Settings 允许您将键值对绑定到任何 Laravel Eloquent 模型。它支持布尔型、浮点型或整型的类型转换。

5.1.0 2022-02-10 19:07 UTC

README

CI codecov StyleCI Latest Stable Version Total Downloads Monthly Downloads License

Eloquent Settings 允许您将键值对绑定到任何 Laravel Eloquent 模型。

🤝 支持

如果您在生产应用、演示演示、个人项目、学校项目等中使用 Renoki Co. 的一个或多个开源包,请通过 Github Sponsors 支持我们的工作。 📦

🚀 安装

安装包

$ composer require rennokki/eloquent-settings

发布配置

$ php artisan vendor:publish --provider="Rennokki\Settings\SettingsServiceProvider" --tag="config"

发布迁移

$ php artisan vendor:publish --provider="Rennokki\Settings\SettingsServiceProvider" --tag="migrations"

🙌 使用方法

您可以将 HasSettings 特性添加到任何 Eloquent 模型

use Rennokki\Settings\Traits\HasSettings;

class User extends Model {
    use HasSettings;
    ...
}

添加设置

$user->newSetting('subscribed.to.newsletter', 1);
$user->newSetting('subscribed.to.newsletter', true);

默认情况下,设置值以 string 存储为字符串。以后,如果您尝试以类型转换获取它们,它们将返回您最初存储的值。如果您将 'true' 存储为字符串,如果您将其转换为布尔型,您将得到 true

如果您计划以除 string 之外的类型转换存储,您可以传递一个额外的第三个参数,该参数可以是 stringbooleanboolintintegerfloatdouble

$user->newSetting('subscribed.to.newsletter', true, 'bool');

更新设置

更新设置可以是值、类型转换或两者兼有,具体取决于发生了什么变化。

$user->updateSetting('subscribed.to.newsletter', false, 'bool');

如果您未指定类型转换参数,则不会更改,只有值会更改,反之亦然。

获取设置与值

您可以使用 getSetting() 获取设置实例,而不是值

$user->getSetting('subscribed.to.newsletter'); // does not accept a cast

如果您计划获取值,您可以使用 getSettingValue()

$user->getSettingValue('subscribed.to.newsletter'); // true, as boolean
$user->getSettingValue('subscribed.to.newsletter', 'int'); // 1, as integer

请记住,当您更新或创建新的设置时,类型转换会存储。默认情况下,下次您不必再次调用类型转换参数,因为它将以存储时指定的方式转换。

$user->newSetting('is.cool', true, 'bool');
$user->getSettingValue('is.cool'); // it returns true as boolean

获取未知设置键的值将返回 null

$user->getSettingValue('subscribed.to.weekly.newsletter'); // null

删除设置

您可以使用 deleteSetting() 从数据库中删除设置。

$user->deleteSetting('subscribed.to.newsletter');

要删除所有设置,请调用 deleteSettings()

$user->deleteSettings();

🐛 测试

vendor/bin/phpunit

🤝 贡献

有关详细信息,请参阅 CONTRIBUTING

🔒 安全性

如果您发现任何安全相关的问题,请通过电子邮件 alex@renoki.org 而不是使用问题跟踪器。

🎉 致谢