Code Monkey home page Code Monkey logo

yii2-eav's Introduction

#Yii2 EAV behavior

Easy way to store extended attribtes of model.

##Usage

class MyModel extends ActiveRecord {
    public function behaviors() {
        return [
            'properties' => [
                'class' => EavBehavior::className(),
                'primaryKey' => 'id', // id related to model
                'tableName' => 'my_model_properties', // table name for store attributes
                'propertiesKey' => 'id', // id related to properties model
                'propertiesName' => 'name', // Properties field with attributes name
                'propertiesValue' => 'value', // Properties field with attributes value
                
            ],
        ];
    }

    public function init() {
        parent::init();
        print_r($this->properties); // show properties as ArrayObject

        $this->properties->foo = 'foo';
        $this->properties->bar = 'bar';

        $this->properties['arrfoo'] = 'foo';
        $this->properties['arrbar'] = 'bar';

        $value_in_array = array('in_arr1' => 'value_arr1', 'in_arr2' => 'value_arr2');
        // This method marge exist properties with properties from $value_in_array
        $this->replaceProperties($value_in_array);

        // Returns the propertie values that have been modified since they are loaded or saved most recently.
        print_r($this->dirtyProperties);
    }
}

EAV table schema should contain fields:

  • model_id;
  • name;
  • value;

For example (MySQL):

CREATE TABLE `my_model_properties` (
  `model_id` int(10) unsigned NOT NULL,
  `name` varchar(255) NOT NULL,
  `value` varchar(255) DEFAULT NULL,
  UNIQUE KEY `u_model_name` (`name`,`model_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

yii2-eav's People

Contributors

ruslanbat avatar prefectzic avatar borodyadka avatar

Stargazers

 avatar Denis Radin avatar Ivan Lemeshev avatar

Watchers

yiqing avatar  avatar

Forkers

daotu ixustrade

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.