YII关联操作:通过Relational Active Record我们可以很方便的从数据获获取数据,例如我们有两个表一个 post 文章表 category 文字分类表。我们在模型中可以只操作post 通过它定义的relations() 获取此文字的category 当然在 post中我们需要定义category的id了。
YII 支持四种类型的关系:
-
BELONGS_TO
(属于): 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A (例如Post
属于User
); -
HAS_MANY
(有多个): 如果表 A 和 B 之间的关系是一对多,则 A 有多个 B (例如User
有多个Post
); -
HAS_ONE
(有一个): 这是HAS_MANY
的一个特例,A 最多有一个 B (例如User
最多有一个Profile
); -
MANY_MANY
: 这个对应于数据库中的 多对多 关系。 由于多数 DBMS 不直接支持 多对多 关系,因此需要有一个关联表将 多对多 关系分割为 一对多 关系。 在我们的示例数据结构中,tbl_post_category
就是用于此目的的。在 AR 术语中,我们可以解释MANY_MANY
为BELONGS_TO
和HAS_MANY
的组合。 例如,Post
属于多个(belongs to many)Category
,Category
有多个(has many)Post
.第四种比较特殊点。接着上面的例子:在 post.php 模型类中定义 relations方法 他返回的是一个数组 我们可以这样写:格式:
'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)
具体方法:
public function relations() { return array( 'category'=>array(self::BELONGS_TO,'category','cat_id'), ); }
在查询时,我们这样做:
$posts=Post::model()->with('category')->find();
在使用 在视图中获取category 可以这样获取
$posts->category->title;
2、定义many_many 是 在外键的那个位置使用第三个表来定义的 ;
关于具体使用方法查看 中文文档
注意:
1、关于关联操作 两个表中有重复的字段 例如create_time
当在使用 CDbCriteria 进行查询时会出现错误 所以当两个表有相同字段需要进行关联操作时需要进行 区分 本表使用 t区分 其他表使用 我们定义的 关系的名字 example:
$criteria=new CDbCriteria(array(
‘select’=>’id,date,title,content,user_id,comment_count’,
‘order’=>’t.create_time desc ‘, // 本表中使用 t
// ’order’=>’author.create_time desc ‘, 使用关系名
));
//区分2
$posts
=Post::model()->with(
'comments'
)->findAll(
array
(
'order'
=>
'<span style="color: #ff0000;">t.create_time</span>, comments.create_time'
));
2、在定义关系时 也可以指定需要查询的数据以及其他一些额外的信息:
'category'=>array(self::BELONGS_TO,'category','cat_id','select'=>'title')
额外的参数如下:
- ‘select’: string|array, a list of columns to be selected. Defaults to ‘*’, meaning all columns. Column names should be disambiguated if they appear in an expression (e.g. COUNT(relationName.name) AS name_count).
- ‘condition’: string, the WHERE clause. Defaults to empty. Note, column references need to be disambiguated with prefix ‘relationName.’ (e.g. relationName.age>20)
- ‘order’: string, the ORDER BY clause. Defaults to empty. Note, column references need to be disambiguated with prefix ‘relationName.’ (e.g. relationName.age DESC)
- ‘with’: string|array, a list of child related objects that should be loaded together with this object. Note, this is only honored by lazy loading, not eager loading.
- ‘joinType’: type of join. Defaults to ‘LEFT OUTER JOIN’.
- ‘alias’: the alias for the table associated with this relationship. It defaults to null, meaning the table alias is the same as the relation name.
- ‘params’: the parameters to be bound to the generated SQL statement. This should be given as an array of name-value pairs.
- ‘on’: the ON clause. The condition specified here will be appended to the joining condition using the AND operator.
- ‘index’: the name of the column whose values should be used as keys of the array that stores related objects. This option is only available to HAS_MANY and MANY_MANYrelations.
- ‘scopes’: scopes to apply. In case of a single scope can be used like ‘scopes’=>’scopeName’, in case of multiple scopes can be used like ‘scopes’=>array(‘scopeName1′,’scopeName2′). This option has been available since version 1.1.9.
关联操作获取数据:
yii通过关联操作获取数据:
如果是一对一:A->VarName
如果是一对多:A->VarName->name
如果是多对多:$data= As->VarName //数组
foreach($data as $val){
$tags[] = $val -> content;
}
userStr = implode(‘, ‘, $tags);
相关推荐
3. **数据库操作**:Yii提供Active Record模式,使得数据库操作更加简洁。通过定义数据模型类,可以直接进行CRUD(创建、读取、更新、删除)操作。 4. **URL管理**:Yii支持自定义URL规则,可以生成SEO友好的URL,...
在“yii1.1中文文档”中,包含了Yii 1.1版本的详尽教程和参考指南。这个版本是Yii框架的一个稳定版本,尽管现在已经有了更新的2.0版本,但仍然有许多项目基于1.1版本运行。文档通常会涵盖框架的基础知识,如MVC...
Yii框架支持的操作系统和环境要求包括: - PHP 5.1.0或更高版本,Yii框架对PHP版本有最低要求,以确保框架功能的正常使用。 - Yii框架在Windows和Linux系统上的Apache HTTP服务器中进行了测试,同时理论上应该支持...
首先,Yii框架的核心特性包括MVC(模型-视图-控制器)设计模式、Active Record ORM(对象关系映射)、I18N和L10N(国际化和本地化)支持、缓存策略、安全性和权限管理等。MVC模式使得代码结构清晰,易于维护。Active...
《Yii框架深度剖析》配套代码 本书不是简单地介绍如何使用 Yii 框架,而是站在框架设计的高度,从源代码级别深 度剖析。本书首先介绍 PHP 框架技术的概念及其应用领域,然后开始仿照 Yii 框架源代码 自定义框架,...
- **ACTIVE RECORD**:是一种更高级的数据访问模式,提供了更丰富的功能,如关联查询、分页等。 **缓存**:包括数据缓存、片段缓存、页面缓存等功能,可以显著提高应用的性能。 #### 四、扩展与测试 **扩展Yii**...
Yii的名字来源于"易",在汉语中意味着简单和快捷,这也体现了框架的设计理念。 一、Yii框架概述: 1. 高性能:Yii通过使用缓存机制、优化的查询构建器和预编译的模板引擎等技术,提供了比其他PHP框架更快的运行速度...
Yii Yii框架 Yii框架快速入门,自己整理的很全的,很容易看懂
YII框架的开发中文文档,帮助哪些正在学习YII框架的同学们,
很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架
在基于Yii框架的PHP程序设计中,Active Record模式提供了一个高度抽象的数据操作方式,极大地简化了数据库操作代码的编写,使开发者能够更加专注于业务逻辑的实现。对于熟悉面向对象编程的开发者而言,Active Record...
在Yii中,首先需要创建一个模型类来代表数据库中的表,然后建立相应的数据库迁移,执行迁移操作以创建表。 3. **视图(View)中的下拉框** 在视图文件中,我们可以使用`yii\widgets\ActiveForm`来创建表单,并使用...
Yii框架是一款基于组件的高性能PHP框架,用于开发Web2.0应用。它的设计目标是高效、易用且可扩展。Yii这个名字来源于一个中文词汇“易”,意味着简单和便捷。本教程将带你逐步走进Yii的世界,了解其核心概念,以及...
构造函数中,它会执行以下操作: - 解析配置,创建组件实例。 - 加载组件的配置。 - 注册错误处理和异常处理机制。 - 初始化Yii的类自动加载器。 - 调用`preInit()`方法进行预初始化。 4. **Request组件初始化...
4. **数据库抽象层**:Yii提供Active Record,一种对象关系映射(ORM)实现,使得数据库操作变得简单。此外,还支持SQL构建器和数据库事务。 5. **安全防护**:内置的安全功能包括输入验证、XSS防护、CSRF保护、...
在实际应用中,Yii框架可以广泛应用于各种类型的项目,例如内容管理系统(CMS)、商城系统(Shop)、办公系统(Office)和客户关系管理系统(CRM)。相比于特定领域框架,Yii更具有灵活性,可以适应多变的需求。 在...
在“yii框架商城”项目中,我们可以看到Yii被用来构建一个电子商务平台,这样的应用通常涉及到用户管理、商品展示、购物车、订单处理、支付接口集成等多个模块。 首先,Yii框架的核心特性之一是其对象关系映射(ORM...