igaster/laravel-model-options

将选项数组存储在JSON列中。在数据库中作为独立键获取/设置值

v1.0.2 2018-11-09 21:00 UTC

This package is auto-updated.

Last update: 2024-09-11 15:13:19 UTC


README

Laravel License Build Status Downloads

一个简单的特性,用于在JSON列中存储选项数组。将它们作为数据库中的独立键获取/设置值

安装

编辑您的项目composer.json文件以要求

"require": {
    "igaster/laravel-model-options": "~1.0"
}

并使用composer update进行安装

如何使用

  1. 在迁移文件中定义名为'option'的JSON键
$table->json('options')->nullable();

注意,较旧的MySQL版本不支持json类型。在这种情况下,您可以安全地回退到字符串类型

$table->string('options')->nullable();
  1. 在相应的模型中使用特性

     use \igaster\modelOptions\modelOptions;
    
  2. 在模型中定义有效的选项键

     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);
}