我使用的是 Yii 1.1.16,想知道 Union 2 模型如何使用默认范围?
model 1 = abc
model 2 = abc2
基本上我想做一个简单的联合
SELECT * FROM `abc`
UNION ALL
SELECT * FROM `abc2`
还没有真正使用默认范围,所以对这个概念有点陌生。 两个表的列号和列名完全相同。
我试过了,但失败了。
在我的 abc
模型中
public function defaultScope() {
return array(
'alias' => 't2',
'select'=>array('t.*, t2.*'),
'union'=>array('SELECT * FROM `abc2`')
);
}
更新:
刚刚实现http://www.yiiframework.com/doc/api/1.1/CDbCriteria
,CDbCriteria
没有union
。
public function defaultScope() {
return array(
//'alias' => 't',
'select'=>array('*'),
'join'=>'UNION ALL SELECT * FROM `abc2`'
);
}
上面的代码给了我一个错误
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't.make_code' in 'where clause'. The SQL statement executed was: SELECT `t`.`class_code`, `t`.`make_code`, `t`.`model_code` FROM `abc` `t` UNION ALL SELECT * FROM `abc2` WHERE `t`.`make_code`=:yp0 LIMIT 1. Bound with :yp0='11'
在两个表中,我都有列 make_code
我需要这样的查询
SELECT * FROM
(
SELECT * FROM `abc`
UNION ALL
SELECT * FROM `abc2`
) AS t
怎么办?
最佳答案
您可以使用 Yii query builder ;当您需要构建非标准查询时,它是首选解决方案,并且它本身支持 UNION
:
$data = Yii::app()->db->createCommand()
->select('*')
->from('abc')
->union('SELECT * FROM `abc2`')
->where('make_code=:make_code', [':make_code'=>42])
->queryAll();
或者,您可以使用 ->getText()
或手动编写 SQL,然后利用 CSqlDataProvider
而不是直接查询制作可配置的数据源。
关于php - MySQL Union All 在 Yii 的默认范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27956474/