igaster / laravel-model-options
将选项数组存储在JSON列中。在数据库中作为独立键获取/设置值
v1.0.2
2018-11-09 21:00 UTC
Requires
- php: >=5.4.0
- illuminate/support: 5.*
Requires (Dev)
- orchestra/testbench: ~3.7
- phpunit/phpunit: ~7.0
This package is auto-updated.
Last update: 2024-09-11 15:13:19 UTC
README
一个简单的特性,用于在JSON列中存储选项数组。将它们作为数据库中的独立键获取/设置值
安装
编辑您的项目composer.json
文件以要求
"require": {
"igaster/laravel-model-options": "~1.0"
}
并使用composer update
进行安装
如何使用
- 在迁移文件中定义名为'option'的JSON键
$table->json('options')->nullable();
注意,较旧的MySQL版本不支持json类型。在这种情况下,您可以安全地回退到字符串类型
$table->string('options')->nullable();
-
在相应的模型中使用特性
use \igaster\modelOptions\modelOptions;
-
在模型中定义有效的选项键
protected $validOptions=[ 'option_1', 'option_2', ];
用法
将选项键访问,就像它们是数据库中的列一样。例如
$model->option_1 = 'value1';
处理冲突
此特性使用__get()
和__set()
魔术方法来执行其...嗯...魔法!但是,如果您想在模型或另一个特性中实现这些函数,PHP会抱怨存在冲突。为了克服这个问题,您在导入特性时必须隐藏特性方法
use igaster\modelOptions\modelOptions { __get as private; __set as private; }
并从您的__get()
/ __set()
方法手动调用它们
//--- copy these in your model if you need to implement __get() __set() methods public function __get($key) { // Handle modelOptions keys $result=$this->modelOptions_get($key); if ($this->modelOptions_handled) return $result; //your code goes here return parent::__get($key); } public function __set($key, $value) { // Handle modelOptions keys $this->modelOptions_set($key, $value); if ($this->modelOptions_handled) return; //your code goes here parent::__set($key, $value); }