关系型 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配置的更多相关文章

  1. 数据库MySQL中关于“多表关联更新”的那些事

    在常见的sql中,我们经常在查询中进行多表关联查询,用的比较熟练.今天在开发中遇到一个实际业务场景是多表关联更新,一时不知所措.本着多学习的态度,没有直接写java代码去实现,终于把多表关联更新的sq ...

  2. 详解MongoDB中的多表关联查询($lookup)

    一.  聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...

  3. 详解MongoDB中的多表关联查询($lookup) (转)

    一.  聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...

  4. sql中修改多表关联的字段

    表1:USERID USERNAME USERREMARK 表2:ROLEID USERID ROLENAME 其中表1的USERID与表2的USERID为关联字段. 若现在只知道ROLEID,要修改 ...

  5. Mysql中实现多表关联查询更新操作

    今天一下要记录一下才行了,每次都要去网上查找方法,每次都难找得要命 Mysql在更新某些字段的数据时,有时候会依据其他表的数据进行更新,需要通过关联后对不同的行更新不同的值,传统的update set ...

  6. Yii框架中的form表单

    <?php//引入命名空间use yii\helpers\Html;?><?php //表单:Html::beginForm(提交地址,提交方法,属性数组);?><?=H ...

  7. yii框架中应用jquery表单验证插件

    效果图: 视图层: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  8. spring data jpa 表关联设置用户表关联角色表配置

    User 表: @ManyToMany(cascade = { CascadeType.MERGE }) @JsonIgnore @JoinTable(name = "UserRole&qu ...

  9. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

随机推荐

  1. HDU 1024 Max Sum Plus Plus【动态规划求最大M子段和详解 】

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. ZOJ 1002 DFS

    Fire Net Time Limit: 2 Seconds      Memory Limit: 65536 KB Suppose that we have a square city with s ...

  3. 解决vi编辑器不能使用方向键和退格键问题的两种方法

    方法1.使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母? 在Ubuntu中,进入vi命令的编辑模式,发现按方向键不能移动光标,而是会输出ABCD,以及退格键也不能正常删除字符.这是由于 ...

  4. linphone-android-客户端APP-工程解读

    LinphoneLauncherActivity 是APP的入口组件,在这个组件里,它会启动LinphoneService这个后台服务,然后不断地判断这个后台服务是否已经启动完毕,如果已经启动完毕后, ...

  5. Spark性能调优之JVM调优

    Spark性能调优之JVM调优 通过一张图让你明白以下四个问题                1.JVM GC机制,堆内存的组成                2.Spark的调优为什么会和JVM的调 ...

  6. git生成sshkey

  7. Thinkphp5.0+Vue2.0前后端分离框架Vuethink

    VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的vue-cli脚手架工具构建 ...

  8. 微信小程序学习笔记

    一.文件结构解析 pages文件夹: 书写各个页面代码以及组件.内部js文件书写js ;  wxml文件为HTML ;   wxss文件为css样式 : json文件为配置当前页面的默认项,如titl ...

  9. 如何查看sublime安装了哪些插件

    你应该安装过package control. 那么只要这样:按ctrl+shift+p,输入package,选择list packages,就看到了. 或者直接查看Installed Packages ...

  10. Java XML 序列化和反序列化

    Utils 类: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWr ...