您要是看着好啊就转载, 写上文章的出处就成。
要是哪写的不好也欢迎您多批评
说明一下, 这个不是什么困难的问题, 但是网上给的答案都不太正确, 或者不太好用。
自己写了一个demo注释版本, 可以方便大家的工作。
请大家在下载后将models和controller里面的文件分别放到yii的models和controller下, 然后在数据库里面执行sql.sql文件
models
<?php
/*
+----------------------------------------------------------------------+
| 这是一个关于员工信息的表单。主表是员工的信息。 |
| 副表有员工类型详细表, 员工所属部门详细表 |
+----------------------------------------------------------------------+
| Authors: 和平老三 <981267080@qq.com> |
+----------------------------------------------------------------------+
*/
class Staff extends CActiveRecord{
public static function model($className=__CLASS__){
return parent::model($className);
}
public function tableName(){
return 'p3_staff'; // 主表的名称
}
public function rule(){
}
/* relations方法 */
public function relations(){
return array(
/*
+----------------------------------------------------------------------+
| 解释一下'type'=>array(self::BELONGS_TO, 'Type', 'type_id') |
| 1. type: 可以起一个你想起的名字, 在下面多表连接的时候需要使用它 |
| 2. self::BELONGS_TO 是连接方式 代表多对一 |
| 3. Type: 是被连接的表所属类的文件名称 比如说/ |
| 我想连接type表 那么我就要在model下新建一个xxx.php 里面的table指向/ |
| 这张表 |
| 4. type_id: 是主表的外键名称 |
+----------------------------------------------------------------------+
*/
'type'=>array(self::BELONGS_TO, 'Type', 'type_id'),
// 如果想要连接更多的表, 就按照上面type这条数据仿写就可以了 例如
'depart'=>array(self::BELONGS_TO, 'Depart', 'depart_id'),
);
}
/**
* [getList 进行多表连接并获取数据]
* @return [array] [返回多表连接后的数据]
*/
public function getList(){
$criteria = new CDbCriteria;
$criteria->alias = 't';
$criteria->with = array('type', 'depart'); // array里面填写relations返回的数组的键值, 并用,隔开
$result = Staff::model()->with('type','depart')->findAll($criteria);
$pageInfo = [];
foreach ($result as $key=>$value) {
$pageInfo[$key]['id'] = $value['id'];
$pageInfo[$key]['name'] = $value['name'];
$pageInfo[$key]['type_id'] = $value['type_id'];
$pageInfo[$key]['depart_id'] = $value['depart_id'];
$pageInfo[$key]['type_title'] = $value->type->title; // 注意 副表要这么写才行
$pageInfo[$key]['depart_title'] = $value->depart->title;
}
return $pageInfo;
}
}
在controller里面调用
···
$result = Staff::model()->getList();
echo "<pre>"; print_r($result);
···
我们就可以看到输出的信息了
Array
(
[0] => Array
(
[id] => 1
[name] => 二他妈妈
[type_id] => 1
[depart_id] => 2
[type_title] => 不明真相的吃瓜群众-类型一
[depart_title] => 部门2
)
......
demo下载地址 密码: h852