[英]Yii2 query give different result with sql query
“表1 ”:
ID | 姓名 |
---|---|
1 | 烏爾里希 |
2 | 斯特恩 |
“表2 ”:
ID | 學校 | 時間 |
---|---|---|
1 | 一個 | 1 |
2 | 乙 | 1 |
我想加入 2 個表以獲取所有信息。 使用 SQL 查詢如下:
SELECT Table1.id,
name,
school
FROM `Table1`
INNER JOIN `Table2`
ON Table1.id = Table2.tid
它為我提供了我期望的所有信息(我的意思是 2 行名稱為“Ulrich”)。
但是當我使用 Yii2 查詢時:
$query = self::find();
$query -> alias('t1')
-> innerJoin(['t2'=>'Table2'], 't1.id=t2.tid')
$result = NULL;
if($total = $query->count()) {
$result = $query
-> select([t1.*, t2.school])
->asArray()
->all()
;
$result[0]['count'] = $total;
}
它只給了我 1 行名稱為“Ulirch”。
誰能幫我解決這個問題。 非常感謝。
如果您使用ActiveRecord::find()
方法創建查詢,您將獲得yii\db\ActiveQuery
的實例。 這是旨在加載ActiveRecord
模型的查詢。 因此,如果您執行任何類型的連接並且您的結果集包含主 model 的主鍵(調用find()
方法來創建查詢的 model), ActiveQuery
將刪除它認為重復的任何行。
基於主 model 主鍵識別重復項,因此即使連接表中的數據不同,結果集中的行也將被視為重復項。 這正是你的情況發生的事情。
為避免這種情況,您必須使用 查詢生成器而不是ActiveQuery
。 您的查詢可能如下所示:
$query = (new \yii\db\Query())
->from(['t1' => self::tableName()])
->innerJoin(['t2'=>'Table2'], 't1.id=t2.tid');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.