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,做的关联容易忘记,这种不好用!