You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Alban Jubert dcc11984cd Initial commit 9 years ago
src Initial commit 9 years ago
tests Initial commit 9 years ago
.gitignore Initial commit 9 years ago
README.md Initial commit 9 years ago
composer.json Initial commit 9 years ago
phpunit.xml Initial commit 9 years ago

README.md

Yii2 Active Record Save Relations Behavior

Automatically validate and save Active Record related models. Both Has Many and Has One relations are supported.

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist lhs/yii2-save-relations-behavior "*"

or add

"lhs/yii2-save-relations-behavior": "*"

to the require section of your composer.json file.

Configuring

Configure model as follows

use lhs\Yii2SaveRelationsBehavior\SaveRelationsBehavior;

class Project extends \yii\db\ActiveRecord
{
    public function behaviors()
    {
        return [
            'timestamp'     => TimestampBehavior::className(),
            'blameable'     => BlameableBehavior::className(),
            ...
            'saveRelations' => [
                'class'     => SaveRelationsBehavior::className(),
                'relations' => ['users', 'company']
            ],
        ];
    }

    public function transactions()
    {
        return [
            self::SCENARIO_DEFAULT => self::OP_ALL,
        ];
    }

    ...


    /**
     * @return ActiveQuery
     */
    public function getCompany()
    {
        return $this->hasOne(Company::className(), ['id' => 'company_id']);
    }

    /**
     * @return ActiveQuery
     */
    public function getMyModelUsers()
    {
        return $this->hasMany(ProjectUser::className(), ['project_id' => 'id']);
    }

    /**
     * @return ActiveQuery
     */
    public function getUsers()
    {
        return $this->hasMany(User::className(), ['id' => 'user_id'])->via('ProjectUsers');
    }

}

Though not mandatory, it is highly recommended to activate the transactions

Usage

Every declared relations in the relations behavior parameter can now be set as follow:

// Has one relation using a model
$model = MyModel::findOne(321);
$company = Company::findOne(123);
$model->company = $company;
$model->save();

or

// Has one relation using a foreign key
$model = MyModel::findOne(321);
$model->company = 123; // or $model->company = ['id' => 123];
$model->save();