奔跑吧笨笨 2017-05-24 10:20:05 13467次浏览 3条评论 4 4 0

AR 两表联查很简单,就是在单表的基础上多加一些,废话不多说了,直接开始。

首先,建两个关联表。

表一

-- Table structure for article
-- ----------------------------
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`new` text,
`t_id` int(11) DEFAULT NULL COMMENT '关联id',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

表二

-- ----------------------------
-- Table structure for type
-- ----------------------------
DROP TABLE IF EXISTS `type`;
CREATE TABLE `type` (
`t_id` int(11) NOT NULL AUTO_INCREMENT,
`t_name` varchar(255) DEFAULT NULL COMMENT '分类名',
PRIMARY KEY (`t_id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

两表关联字段是 article.t_id = type.t_id

表建好之后,前戏就完成了,下边开始干活。

每个表建一个AR Model ,要牢记, 和单表没区别,唉,现在废话太多了。(^__^) 嘻嘻……

<?php
/**
 * Created by PhpStorm.
 * User: wangj
 * Date: 2017/5/23
 * Time: 21:06
 */

namespace backend\models;

use yii\db\ActiveRecord;
class Type extends ActiveRecord{
    public static function tableName(){
        return 'type';
    }

}

第二个 AR Model 就稍微多了一丢丢了  请看

<?php
/**
 * Created by PhpStorm.
 * User: wangj
 * Date: 2017/5/23
 * Time: 21:02
 */

namespace backend\models;

use yii\db\ActiveRecord;
class Article extends ActiveRecord{

    public static function tableName(){
        return'article';
    }
    //关联表      get(关联表Model名)
    public function getType(){
                           参数一 关联Model名   参数二 关联字段 不能写表.t_id 自己默认后边是本Model的表id  前边是关联表的id
        return $this->hasOne(Type::className(),['t_id'=>'t_id']);
    }

}

这就关联上了。

下面就是,查询了:

<?php
/**
 * Created by PhpStorm.
 * User: wangj
 * Date: 2017/5/23
 * Time: 21:09
 */

namespace backend\controllers;

use yii\web\Controller;
use backend\models\Article;
class DemoController extends Controller{

    //两表联查 数据
    public function actionIndex(){
                                     关联表名 注意大小写    查询字段                       asArray()转为数组 否则是对象               
        $model = Article::find()->joinWith(['type'])->select('new,t_name,article.t_id')->asArray()->all();
        print_r($model);
    }

}

好了,完成了,就是这么简单。

觉得很赞
您需要登录后才可以评论。登录 | 立即注册