簡體   English   中英

Yii2 查詢與 sql 查詢給出不同的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM