mar/yii2-simple-eav

以简单方式为应用程序中的每个模型添加动态属性

安装: 330

依赖者: 0

建议者: 0

安全: 0

类型:yii2-extension

v1.0.2 2016-04-13 10:36 UTC

This package is not auto-updated.

Last update: 2024-09-23 12:37:24 UTC


README

注意!扩展尚未完成,需要一些更新和修复(例如,从eav表中删除已删除的eav字段,检查性能等)

Simple EAV

以简单方式为应用程序中的每个模型添加动态属性

安装

安装此扩展的最佳方式是通过composer

运行以下命令之一:

php composer.phar require --prefer-dist mar/yii2-simple-eav "*"

或者将以下内容添加到您的composer.json文件的require部分:

"mar/yii2-simple-eav": "*"

从扩展的迁移文件夹中执行迁移

使用

使用

扩展安装后,只需在代码中使用即可:

  1. 将行为、别名和验证规则添加到您的模型中,如下所示:(您可以使用任何别名,它将用于在数据库中识别您的 $model::className,如果您更改别名,旧属性值将消失=)

    public function behaviors() {

     return [
         [
             'class' => \mar\eav\behaviors\EavBehavior::className(),
             'modelAlias' => 'product',
             'eavAttributesList' => [
                 'eavProperty1' => [
                     'rule' => [['eavProperty1'], 'string', 'max' => 255],
                     'type' => EavBehavior::ATTRIBUTE_TYPE_TEXT,
                 ],
                 'eavProperty2' => [
                     'rule' => [['eavProperty2'], 'integer'],
                     'type' => EavBehavior::ATTRIBUTE_TYPE_ARRAY,
                     // mode MODE_SET_EMPTY_IF_NO_VALUE_IN_REQUEST - clear attribute value if no value like Classname[attributeName] in request, usefull for forms handling
                     'modes' => [
                                                 EavBehavior::MODE_SET_EMPTY_IF_NO_VALUE_IN_REQUEST
                     ]
                 ],
                 .....
             ]
         ]
    
     ];
    

    }

  2. 如果您愿意,可以向模型的 attributeLabels() 方法添加 eav 属性的标签

3. 就这么多了,您可以像 $model->eavProperty1 这样访问新的属性,您还可以在表单中使用它

    <?= $form->field($model, 'eavProperty1')->textInput(['maxlength' => true]) ?>

PS:1) 如果您从行为配置中删除属性,属性和值将被删除

可能未来的更新

1. search by eav fields
2. relations by eav fields
3. using category_id to bind eav attributes to class by category