最近在使用Yii2来做网站,感触比较深的是虽然感觉自己看文档看得七七八八,看上去貌似也好像懂的基本用法,但真正的困难还是在于如何应用到自己的实际开发当中。
今天在做网站的后台管理,碰巧需要多表查询,可能自己理解力比较差,折腾了很久才懂得怎么使用,在这里记录一下。
下面我们是使用AR模型来实现多表查询:
1、第一步我们先创建AR模型,分别为Customer(对应customer用户表)以及Order(对应order订单表,它与customer表为多对一关系)
class Customer extends \yii\db\ActiveRecord{
//这里返回订单中金额大于100的订单
public function getBigOrders($threshold = 100) {
return $this->hasMany(Order::className(), ['customer_id' => 'id'])
->where('subtotal > :threshold', [':threshold' => $threshold])
->orderBy('id');
}
}
class Order extends \yii\db\ActiveRecord{
// 订单和客户通过 Customer.id -> customer_id 关联建立一对一关系
public function getCustomer() {
return $this->hasOne(Customer::className(), ['id' =>'customer_id']); }}
2、查询拥有金额大于100的订单的所有用户并用gridview显示
在控制器SiteController.php中
namespace app\models\controller;
use yii\data\ActiveDataProvider;
class SiteController extend Controller {
public function actionGetorders {
$dataProvider = new ActiveDataProvider([
'query' => Customer::find()->innerJoinWith('bigorders')//如果还需要关联到第三个表则可使用with('books')
'pagination' => [
'pageSize' => 10,//每页10条
],
]);
return $this->render('index',['dataProvider' => $dataProvider]);
}
}
在这里需要注意下的是:
1)分页器Pagination以及数据提供器ActiveDataProvider都仅支持yii\db\ActiveQuery对象而非数组形式,所以后面加上了all()方法或者是使用了Yii::$app->db->createCommand()方法是会报错的;
2)此外,如果是使用了Order::findeBySql()来执行查询也是出现错误的;
3、在view文件夹的index.php中显示数据
use yii\grid\GridView;
<?php
echo GridView::widget([
'dataProvider' => $dataProvider,
]);
- Yii2使用Url组件
- Yii2的Html,Request组件详解
- YII2.0框架, 多图片上传功能
- yii2-imagine配置
- 有洁癖的禁止默认YII自带垃圾代码(个人认为)、JS、CSS(新手教程)
- Yii2 API接口输出统一Json和jsonp格式方法
- MySql 创建表的一些语句释义
- Yii2联合查询(配合GridView)
- Yii 通用系统字典
- ArrayHelper的多维数组排序函数multisort,强大无比。
- 路由规则,在Url中替换使用'/'以外的符号连接
- 从excel文件中读取表格内容,并批量写入数据库
- yii2注册时验证用户名、邮箱等唯一性
- Yii2最全的实战教程
- Composer安装yii2-imagine 压缩,剪切,旋转,水印
- LinkPager增加总页数 和总记录数
- Yii2 获取模块名控制器名方法名
- Yii2使用yii2-adminlte+yii2-admin左侧菜单子路径不高亮问题又解
- 前端CSS框架
- Yii2 之 frontend 子模块实践之一:添加前后台子模块
- Yii2 之 frontend 子模块实践之二:构建子模块的独立配置
- Yii2 之 frontend 子模块实践之三:布局和语言配置
- 完美解决ajax验证码不刷新问题,让验证码更加美观,不修改任何源代码
- yii2.0 表单小部件常用的默认选中
- Yii2 controller 传值给layout
- yii2 dropDownList 二级和三级 联动写法
- 微信扫码登录 新窗口二维码 扫完关闭二维码页面 进入登录页面
- yii2 实现 "上一篇,下一篇" 功能
- Yii 行为简单应用
- SQL语句