yii-cadvancedarbehavior
Fork of Yii 1.1 CAdvancedArBehavior (Advanced functions for Active Record implementation) by thyseus., (*1)
Yii 1.1: cadvancedarbehavior
The CAdvancedArBehavior extension adds up some functionality to the
default possibilites of yii´s ActiveRecord implementation. At the moment
it is able to automatically save MANY_MANY relation objects when
save()-ing an Object., (*2)
Changelog ¶
Version 0.3 added 25. 05. 2011 by thyseus, (*3)
- added \$ignoreRelations to ignore specified relations. The Behavior
will take all found many2many relations by default. Specify
exceptions in this array.
- fixes all the bugs and glitches found in the discussion
Resources ¶
Documentation ¶
Requirements ¶
Installation ¶
To use this extension, just copy this file to your extensions/
directory, add 'import' =>
'application.extensions.CAdvancedArBehavior', [...] to your
config/main.php and add this behavior to each model you would like to
inherit the new possibilities., (*4)
Usage ¶
public function behaviors(){
return array( 'CAdvancedArBehavior' => array(
'class' => 'application.extensions.CAdvancedArBehavior'));
}
Possibilities so far: ¶
Better support of MANY_TO_MANY relations: ¶
When we have defined a MANY_MANY relation in our relations() function,
we are now able to add up instances of the foreign Model on the fly
while saving our Model to the Database. Let´s assume the following
Relation:, (*5)
Post has: 'categories'=>array(self::MANY_MANY, 'Category',
'tbl_post_category(post_id, category_id)'), (*6)
Category has: 'posts'=>array(self::MANY_MANY, 'Post',
'tbl_post_category(category_id, post_id)'), (*7)
Now we can use the attribute 'categories' of our Post model to add up
new rows to our MANY_MANY connection Table:, (*8)
$post = new Post();
$post->categories = Category::model()->findAll();
$post->save();
This will save our new Post in the table Post, and in addition to this
it updates our N:M-Table with every Category available in the Database., (*9)
We can further limit the Objects given to the attribute, and can also go
the other Way around:, (*10)
$category = new Category();
$category->posts = array(5, 6, 7, 10);
$category->save();
We can pass Object instances like in the first example, or a list of
integers that representates the Primary key of the Foreign Table, so
that the Posts with the id 5, 6, 7 and 10 get´s added up to our new
Category., (*11)
5 Queries will be performed here, one for the Category-Model and four
for the N:M-Table tbl_post_category. Note that this behavior could be
tuned further in the future, so only one query get´s executed for the
MANY_MANY Table., (*12)
We can also pass a single object or an single integer:, (*13)
$category = new Category();
$category->posts = Post::model()->findByPk(12);
$category->posts = 12;
$category->save();
Change Log ¶
January 30, 2010 ¶
Version 0.2 Code Cleanup, Bugfixes and added save() support, (*14)
January 28, 2010 ¶