最近在使用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語句