The ManyManyActiveRecord YII extension class adds up functionality of saving MANY_MANY relation field value using simple arrays.
Yii 1.1 or above
To use this extension:
-
copy ManyManyActiveRecord to your components directory
-
check that your config have autoloaded
'import'=>array( ... 'application.components.*', ...
-
extend your model (which has MANY_MANY relation), category for example
class Category extends ManyManyActiveRecord ...
If Category has:
'posts'=>array(self::MANY_MANY, 'Post', 'tbl_post_category(category_id, post_id)')
Create tbl_post_category (category_id, post_id) table and then
you can set relations by (with erasing old ones)
$model = Category::model()->findByPk(10);
$model->setRelationRecords('posts',array(1, 2, 3));
or you can add new relations (without deletions of old ones)
$model = Category::model()->findByPk(10);
$model->addRelationRecords('posts',array(1, 2, 3));
or you can remove some relations
$model = Category::model()->findByPk(10);
$model->removeRelationRecords('posts',array(1,2,3));
or you can remove all relation records
$model = Category::model()->findByPk(10);
$model->removeAllRelationRecords('posts');
or if you need to save additional data in tbl_post_category (like user_id for example) you add relations with $additionalFields
$model = Category::model()->findByPk(10);
$model->addRelationRecords('posts',array(1, 2, 3), array('user_id' => Yii::app()->user->id));
Each of this method saves data to database, you don't need to save the model.