在yii下使用model進行多表鏈接的demo

您要是看着好啊就轉載, 寫上文章的出處就成。
要是哪寫的很差也歡迎您多批評php

說明一下, 這個不是什麼困難的問題, 可是網上給的答案都不太正確, 或者不太好用。
本身寫了一個demo註釋版本, 能夠方便你們的工做。
請你們在下載後將models和controller裏面的文件分別放到yii的models和controller下, 而後在數據庫裏面執行sql.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);

···數組

咱們就能夠看到輸出的信息了yii

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 二他媽媽
            [type_id] => 1
            [depart_id] => 2
            [type_title] => 不明真相的吃瓜羣衆-類型一
            [depart_title] => 部門2
        )
    ......

demo下載地址 密碼: h852code

連接描述get

相關文章
相關標籤/搜索