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.
|
9 years ago | |
---|---|---|
src | 9 years ago | |
tests | 9 years ago | |
.gitignore | 9 years ago | |
README.md | 9 years ago | |
composer.json | 9 years ago | |
phpunit.xml | 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();