macagua/yii-cadvancedarbehavior

thyseus 开发的 Yii 1.1 CAdvancedArBehavior (Active Record 实现的高级功能) 的分支

dev-master 2015-07-29 04:26 UTC

This package is auto-updated.

Last update: 2024-09-20 09:28:29 UTC


README

thyseus 开发的 Yii 1.1 CAdvancedArBehavior (Active Record 实现的高级功能) 的分支。

Yii 1.1: cadvancedarbehavior

CAdvancedArBehavior 扩展为 yii 的 ActiveRecord 实现添加了一些功能。目前,它在保存对象时能够自动保存许多 ManyToMany 关系对象。

变更日志

版本 0.3 于 2011 年 5 月 25 日由 thyseus 添加

  • 添加 $ignoreRelations 以忽略指定的关系。默认情况下,行为将获取所有找到的 ManyToMany 关系。在此数组中指定异常。
  • 修复了讨论中发现的全部错误和问题

资源

文档

要求

  • Yii 1.1 或更高版本

安装

要使用此扩展,只需将此文件复制到您的 extensions/ 目录中,将 'import' => 'application.extensions.CAdvancedArBehavior', [...] 添加到您的 config/main.php 中,并将此行为添加到您希望继承新功能的每个模型中。

使用

public function behaviors(){
          return array( 'CAdvancedArBehavior' => array(
            'class' => 'application.extensions.CAdvancedArBehavior'));
          }

目前的功能:

更好的 ManyToMany 关系支持:

在我们定义了 relations() 函数中的 ManyToMany 关系后,我们现在能够在保存我们的模型到数据库时动态地添加外键模型的实例。

Post 有: 'categories'=>array(self::MANY_MANY, 'Category', 'tbl_post_category(post_id, category_id)')

Category 有: 'posts'=>array(self::MANY_MANY, 'Post', 'tbl_post_category(category_id, post_id)')

现在我们可以使用 Post 模型的 'categories' 属性向我们的 ManyToMany 连接表添加新行。

$post = new Post();
$post->categories = Category::model()->findAll();
$post->save();

这将保存我们的新 Post 到 Post 表,并且除了这个之外,它还会更新我们的 N:M 表,包括数据库中所有可用的 Category。

我们可以进一步限制传递给属性的对象,也可以反过来操作

 $category = new Category();
 $category->posts = array(5, 6, 7, 10);
 $category->save();

我们可以传递对象实例,如第一个示例中那样,或者一个代表外键表主键的整数的列表,这样 id 为 5、6、7 和 10 的帖子就会添加到我们的新 Category 中。

这里将执行 5 次查询,一次用于 Category 模型,四次用于 N:M 表 tbl_post_category。请注意,此行为在未来可能进一步调整,因此对 ManyToMany 表只执行一个查询。

我们也可以传递一个 单个 对象或一个单整数

 $category = new Category();
 $category->posts = Post::model()->findByPk(12);
 $category->posts = 12;
 $category->save();

变更日志

2010 年 1 月 30 日

版本 0.2 代码清理、错误修复并添加了 save() 支持

2010 年 1 月 28 日

  • 初始发布。