Yii2聯合查詢(配合GridView)
最近在使用Yii2來做網站,感觸比較深的是雖然感覺自己看文件看得七七八八,看上去貌似也好像懂的基本用法,但真正的困難還是在於如何應用到自己的實際開發當中。
今天在做網站的後臺管理,碰巧需要多表查詢,可能自己理解力比較差,折騰了很久才懂得怎麼使用,在這裡記錄一下。
下面我們是使用AR模型來實現多表查詢:
<a>1、第一步我們先建立AR模型,分別為Customer(對應customer使用者表)以及Order(對應order訂單表,它與customer表為多對一關係)</a>
<code>
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']); }}
</code>
<a>2、查詢擁有金額大於100的訂單的所有使用者並用gridview顯示</a>
在控制器<code>SiteController.php</code>中
<code>
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]);
}
}
</code>
<strong>在這裡需要注意下的是:
1)分頁器Pagination以及資料提供器ActiveDataProvider都僅支援yii\db\ActiveQuery物件而非陣列形式,所以後面加上了all()方法或者是使用了Yii::$app->db->createCommand()方法是會報錯的;
2)此外,如果是使用了Order::findeBySql()來執行查詢也是出現錯誤的;
</strong>
<a>3、在view資料夾的index.php中顯示資料</a>
<code>use yii\grid\GridView;
<?php
echo GridView::widget([
'dataProvider' => $dataProvider,
]);
相關文章
- thinkPHP多表聯合查詢PHP
- jpa動態查詢與多表聯合查詢
- JPA 之 多表聯合查詢
- SQL 三表聯合查詢SQL
- 按月分表聯合查詢
- 01-sql-聯合查詢SQL
- 基於聯合查詢的注入
- GridView和DataSource的聯合使用View
- 模型聯合查詢返回指定欄位模型
- mybatis多表聯合查詢的寫法MyBatis
- 多表聯合查詢 - 基於註解SQLSQL
- MySQL自聯合查詢的一個例子MySql
- beego orm join 聯合查詢的問題GoORM
- SQL多個表實現聯合查詢SQL
- MYSQL學習筆記24: 多表查詢(聯合查詢,Union, Union All)MySql筆記
- Yii2實現跨mysql資料庫關聯查詢排序功能MySql資料庫排序
- jpa 聯合查詢資料,查詢使用者資訊與部門資訊
- 資料庫學習(六)聯合查詢union資料庫
- SQL聯合查詢中的關鍵語法SQL
- yii2 資料庫常見查詢資料庫
- yii2 查詢資料庫語法資料庫
- 兩個TABALE在聯合查詢很慢的問題
- Sql Server 聯合查詢的排序規則衝突SQLServer排序
- goldendate呼叫sql實現類似表聯合查詢GoSQL
- 合併查詢
- Elasticsearch複合查詢——boosting查詢Elasticsearch
- MySQL聯結查詢和子查詢MySql
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- MySQL--操作簡記(聯結表,組合查詢(UNION))MySql
- SQL Server 多表聯合查詢取最新一條資料SQLServer
- 注意:Oracle中的聯合主鍵查詢問題(轉)Oracle
- 區分關聯子查詢和非關聯子查詢
- exist-in和關聯子查詢-非關聯子查詢
- 組合查詢 (轉)
- MyBatis關聯查詢MyBatis
- thinkphp關聯查詢PHP
- Yii2的GridView使用大全 --- 18個問答View
- 使用 Amazon Aurora PostgreSQL 聯合查詢、pg_cron 和 Amazon LambdaSQL