yii 多表联合查询的几种方法
yii多表联合查询,
第一种,用command,自己拼接sql语句执行查询
第二种,用AR,model需继承下面的ar,执行queryall或queryrow方法
<?php
//application/components/BaseActiveRecord.php
class BaseActiveRecord extends CActiveRecord{ /**
* Returns the static model of the specified AR class.
* The model returned is a static instance of the AR class.
* It is provided for invoking class-level methods (something similar to static class methods.)
*
* <pre>
* public static function model($className=__CLASS__)
* {
* return parent::model($className);
* }
* </pre>
*
* @param string $className active record class name.
* @return DBActiveRecord active record model instance.
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
} /**
* 获取字段rawName加表别名前缀,主要联表时候防止where条件中字段冲突用的
* @param string $columnName
* @return string
*/
public function getColumnRawName($columnName)
{
$prefix = $this->getTableAlias(true) . '.';
$columns = $this->tableSchema->columns;
if (isset($columns[$columnName]))
{
return $prefix.$columns[$columnName]->rawName;
}
else
{
return $columnName;
}
} /**
*
* @param mixed $criteria
*/
public function queryAll($criteria = NULL)
{
if ( ! empty($criteria))
{
$this->getDbCriteria()->mergeWith($criteria);
} $result = $this->getCommandBuilder()
->createFindCommand($this->tableSchema, $this->getDbCriteria())
->queryAll(); $this->setDbCriteria(NULL); return $result;
} public function queryRow($criteria = NULL)
{
if ($criteria != NULL)
{
$this->getDbCriteria()->mergeWith($criteria);
} $result = $this->getCommandBuilder()
->createFindCommand($this->tableSchema, $this->getDbCriteria())
->queryRow(); $this->setDbCriteria(NULL); return $result;
} public function compare($column, $value, $partialMatch = FALSE, $operator = 'AND')
{
$criteria = new \CDbCriteria;
$column = $this->getColumnRawName($column); if ($value === array())
{
$criteria->condition = "1 = 0";
}
else if ($value === '')
{
$criteria->condition = $column." = ''";
}
else
{
$criteria->compare($column, $value, $partialMatch, $operator, TRUE);
} $this->getDbCriteria()->mergeWith($criteria); return $this;
} }
还有一种就是用ar的relation,做的关联容易忘记,这种不好用!
yii 多表联合查询的几种方法的更多相关文章
- thinkphp两表,多表联合查询及分页的连贯操作写法
ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示: 1.原生查询示例: 代码如下: $Model = new Model(); $sql ...
- Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新
CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...
- SharePoint 2013 列表多表联合查询
在SharePoint的企业应用中,遇到复杂的逻辑的时候,我们会需要多表查询:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,需要使用SPQuery的Joins ...
- 一步步学Mybatis-实现多表联合查询(4)
上一章节中我们已经完成了对单表的CRUD操作,接下来今天这一讲讲述的是关于Mybatis在多表查询时候的应用,毕竟实际业务中也是多表的联合查询比较多嘛~ 还记得最一开始我们新建过一张Website表吗 ...
- 理解mysql执行多表联合查询
阅读目录 一:inner join(内连接) 二:left join(左连接) 三:right join(右连接) 四:cross join(交叉连接) 五:union操作 六:node+mysql ...
- SharePoint 列表多表联合查询
在SharePoint平台二次开发中,我们有时需要涉及多表关联查询展示多列表中的不同字段信息:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,有一定的局限性,需 ...
- 【Oracle】曾经的Oracle学习笔记(4-7)多表联合查询,子查询,动态条件查询
一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables------------------------------- ...
- mybatis:开发环境搭建--增删改查--多表联合查询(多对一)
什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或 ...
- 你了解MySQL中的多表联合查询吗?
前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2 ...
随机推荐
- C#2.0 特性
泛型 迭代器 分布类 可空类型 匿名方法 命名空间别名限定符 静态类 外部程序程序集别名 属性访问器可访问性 委托中的协变和逆变 如何声明.实例化.使用委托 固定大小的缓冲区 友元程序集 内联警告控制 ...
- src 小心得
关于src的引用,不要用相对路径, ../ 虽然省事,但是跳转页面时容易出错. 举个例子: 在web页面引用 D:\phpStudy\WWW\ueditor\utf8-php 这个文件夹下面 ...
- java项目报junit 相关错误
maven配置,java工程运行时需要把test测试相关移除
- 解决升级WordPress及插件需输入FTP账号的问题
当添加,删除,升级 WordPress 插件或者直接升级 WordPress 的时候,WordPress 总是提示让你输入 FTP 帐号信息,非些烦人. 我们可以在 wp-config.php 中定义 ...
- Spring配置bean文件的底层实现方式
首先 bean文件如下: <beans> <bean id="date" class="java.util.Date"></bea ...
- 初始Jquery--以及工厂函数
一.JavaScript框架 1什么是JavaScript框架 普通JavaScript的缺点:每种控件的操作方式不统一,不同浏览器下有区别,要编写跨浏览器的程序非常麻烦.因此出现了很多对JavaSc ...
- Hibernate get和load区别
1.从返回结果上对比:load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常get方法检索不到的话会返回null 2.从检索执行机制上对比: ...
- iOS开发——高级篇——如何集成支付宝SDK
一.什么是支付宝 第三方支付平台 和内购非常相似内购是用户将钱付款给苹果,之后苹果分成给商户支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们的账户 使用支付宝前提购买的物品必须是和应用程序无关的. ...
- BZOJ3223——Tyvj 1729 文艺平衡树
1.题目大意:维护序列,只有区间翻转这个操作 2.分析:splay的经典操作就是实现区间翻转,就是在splay中有一个标记,表示这个区间被翻转了 然后就是记得各种的操作访问某个点时,记得下传,顺便交换 ...
- 实现简易而强大的游戏AI——FSM,有限状态机
http://blog.friskit.me/2012/05/introduction-of-fsm/ 在很久很久以前,受限于计算机性能和图形效果,游戏往往是以玩家为唯一主动对象的,玩家发出动作,游戏 ...