在yii下使用model进行多表连接的demo

您要是看着好啊就转载, 写上文章的出处就成。
要是哪写的不好也欢迎您多批评

说明一下, 这个不是什么困难的问题, 但是网上给的答案都不太正确, 或者不太好用。
自己写了一个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

链接描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值