Yii 2.0 ActiveRecord 两表联查 [ 2.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);
}
}
好了,完成了,就是这么简单。
奔跑吧笨笨
注册时间:2017-05-11
最后登录:2019-12-18
在线时长:10小时12分
最后登录:2019-12-18
在线时长:10小时12分
- 粉丝3
- 金钱690
- 威望20
- 积分990
共 3 条评论
牛逼,很好用。
这些都是基础了
我试了一下 怎么只查出了一个表的数据
@zhaochao0823 不好意思,好久没登号了,这个写法是没问题的,我相信,你现在已经找到问题了。
没毛病,6666
博客地址:https://blog.csdn.net/qq_37837134