Yii AR中处理多表关联的relations配置
关系型 Active Record官方文档中指出:
两张表之间的关联是根据外键来的,但是这种外键关联虽然在数据容错方面有益处,但是在性能上是个损伤,所以,一般是不定义外键的.
这种情况下,他们之间的关联又会根据什么来呢?
有A,B两张表,在A与B表中都存在一个字段filedX,并且同时字段filedX也是A,B的关联字段,这种情况下,可以直接
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'VarName'=>array('RelationType', 'ClassName', 'filedX', ...additional options)
);
}
这样运用relations方法.
另外有一种情况是,虽然A,B两张表,有关联,但是关联字段不是同一个名字,如在A表中,关联B表的字段名是afieldb ,而在B表被A表关联的字段名是bfielda,则不能直接应用以上方式来进行联接查询,可以变通一下成这样:
return array(
'VarName'=>array('RelationType', 'ClassName', '', 'on' => ' t.afieldb = VarName.bfielda ',...additional options)
);
解释一下:
array的前三个元素是不能变了,他们的意义与他们的顺序相对应,第一个元素一定得是关联类型,第二个元素得是被关联表model的类名,第三个元素得
是关联字段,除些三个,其它元素则与位置关系不大了,不过,必须指定元素的key,如本例中的'on'就是键名,这里的第三个元素是空,就两个单引号,后
面'on'的数据键值指定他们的关联关系,t.afieldb,表示主表字段afieldb,VarName.bfielda表示被关联表字段
bfielda,顺便说明一下,在所有relations关系中,主表都有个别名,并且这个别名就是t,而被关联表也有一个别名,这个别名就是定义的
VarName,如:
'shops'=>array(self::HAS_ONE, 'SubjectShops', '' , 'on'=>' t.sid = shops.id '),
其中,被关联表别名就是shops。
除了这个'on'元素外,在关系声明时可以指定附加的选项,概括如下:
select: 关联的 AR 类中要选择(select)的列的列表。 默认为 '*',即选择所有列。此选项中的列名应该是已经消除歧义的。
condition: 即 WHERE 条件。默认为空。此选项中的列名应该是已经消除歧义的。
params: 要绑定到所生成的 SQL 语句的参数。应该以 名-值 对数组的形式赋值。此选项从 1.0.3 版起有效。
on: 即 ON 语句。此处指定的条件将会通过 AND 操作符附加到 join 条件中。此选项中的列名应该是已经消除歧义的。 此选项不会应用到 MANY_MANY 关系中。此选项从 1.0.2 版起有效。
order: 即 ORDER BY 语句。默认为空。 此选项中的列名应该是已经消除歧义的。
with:
a list of child related objects that should be loaded together with
this object. Be aware that using this option inappropriately may form an
infinite relation loop.
joinType: type of join for this relationship. It defaults to LEFT OUTER JOIN.
alias:
the alias for the table associated with this relationship. This option
has been available since version 1.0.1. It defaults to null, meaning the
table alias is the same as the relation name.
together: whether
the table associated with this relationship should be forced to join
together with the primary table and other tables. This option is only
meaningful for HAS_MANY and MANY_MANY relations. If this option is set
false, the table associated with the HAS_MANY or MANY_MANY relation will
be joined with the primary table in a separate SQL query, which may
improve the overall query performance since less duplicated data is
returned. If this option is set true, the associated table will always
be joined with the primary table in a single SQL query, even if the
primary table is paginated. If this option is not set, the associated
table will be joined with the primary table in a single SQL query only
when the primary table is not paginated. For more details, see the
section "Relational Query Performance". This option has been available
since version 1.0.3.
join: the extra JOIN clause. It defaults to empty. This option has been available since version 1.1.3.
group: the GROUP BY clause. It defaults to empty. Column names referenced in this option should be disambiguated.
having:
the HAVING clause. It defaults to empty. Column names referenced in
this option should be disambiguated. Note: option has been available
since version 1.0.1.
index: the name of the column whose values
should be used as keys of the array that stores related objects. Without
setting this option, an related object array would use zero-based
integer index. This option can only be set for HAS_MANY and MANY_MANY
relations. This option has been available since version 1.0.7.
In addition, the following options are available for certain relationships during lazy loading:
limit: limit of the rows to be selected. This option does NOT apply to BELONGS_TO relation.
offset: offset of the rows to be selected. This option does NOT apply to BELONGS_TO relation.
Yii AR中处理多表关联的relations配置的更多相关文章
- 数据库MySQL中关于“多表关联更新”的那些事
在常见的sql中,我们经常在查询中进行多表关联查询,用的比较熟练.今天在开发中遇到一个实际业务场景是多表关联更新,一时不知所措.本着多学习的态度,没有直接写java代码去实现,终于把多表关联更新的sq ...
- 详解MongoDB中的多表关联查询($lookup)
一. 聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...
- 详解MongoDB中的多表关联查询($lookup) (转)
一. 聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...
- sql中修改多表关联的字段
表1:USERID USERNAME USERREMARK 表2:ROLEID USERID ROLENAME 其中表1的USERID与表2的USERID为关联字段. 若现在只知道ROLEID,要修改 ...
- Mysql中实现多表关联查询更新操作
今天一下要记录一下才行了,每次都要去网上查找方法,每次都难找得要命 Mysql在更新某些字段的数据时,有时候会依据其他表的数据进行更新,需要通过关联后对不同的行更新不同的值,传统的update set ...
- Yii框架中的form表单
<?php//引入命名空间use yii\helpers\Html;?><?php //表单:Html::beginForm(提交地址,提交方法,属性数组);?><?=H ...
- yii框架中应用jquery表单验证插件
效果图: 视图层: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- spring data jpa 表关联设置用户表关联角色表配置
User 表: @ManyToMany(cascade = { CascadeType.MERGE }) @JsonIgnore @JoinTable(name = "UserRole&qu ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
随机推荐
- Git分支-分支简介
源地址:https://git-scm.com/book/zh/ch3-1.html 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线 ...
- bootstrap-paginator分页插件的两种使用方式
分页有两种方式: 1. 前台分页:ajax一次请求获取全部数据,适合少量数据(万条数据以下): $.ajax({ type: "GET", url: "",// ...
- noip级别数论?
TAT快noip了才开始去接触数论(真心不敢学..)这里做一下整理吧(都是些定义之类的东西= =) 欧几里德:gcd(a,b)=gcd(b,a%b);具体证明见百科? 扩展欧几里德: 求a*x+b*y ...
- hdu_5104 Primes Problem()
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5104 rimes Problem Time Limit: 2000/1000 MS (Java/Oth ...
- 斐波那契数列 Library
http://acm.tju.edu.cn/toj/showp3267.html3267. Library Time Limit: 1.0 Seconds Memory Limit: 6553 ...
- sql中查询同一列所有值出现的次数
尊重原创:http://blog.csdn.net/love_java_cc/article/details/52234889 有表如下table3: 需要查询country中各个国家出现的次数 SQ ...
- 通俗理解TCP握手次数是三次
理解之后,应该说是至少三次就可以保证可靠传输了. 看到网上一篇帖子http://www.cnblogs.com/TechZi/archive/2011/10/18/2216751.html是这么说的, ...
- 【Java提高】---枚举的应用
枚举 一.枚举和静态常量区别 讲到枚举我们首先思考,它和public static final String 修饰的常量有什么不同. 我举枚举的两个优点: 1. 保证了 ...
- Tree Recovery(由先、中序列构建二叉树)
题目来源: http://poj.org/problem?id=2255 题目描述: Description Little Valentine liked playing with binary tr ...
- AD转换
一.AD转换的概念 AD转换的功能是把模拟量电压转换为数字量电压.DA转换的功能正好相反,就是讲数字量转换位模拟量. 二.芯片PCF8591介绍 PCF8591是一个单片集成.单独供电.低功耗.8- ...