簡體   English   中英

如何在Yii2 Active Record中使用JOIN作為關系模型?

[英]How to use JOIN in Yii2 Active Record for relational model?

我有兩個名為Books and Reviews的表。 Books表與Reviews有一對多的關系。

我想搜索書籍並按評論排序。

例如,如果有10本書可用且書籍已在評論中進行審核,那么我想通過使用WHERE子句查找所有書籍並計算評論,然后根據評論編號訂購所有書籍。

我的SQL查詢如下:

 Books::find()
   ->where([
     'and', 
     ['like', 'books.bookName', $bookName],
     ['like', 'books.status', 'Enabled'] 
    ])
  ->joinWith(['reviews' => function ($q){
        $q->select(['COUNT(*) as cnt']);
    }])
  ->orderBy(['cnt' => 'DESC'])
  ->all();

它給了我以下錯誤消息:

SQLSTATE [42S22]:未找到列:1054'order子句'中的未知列'cnt'

我在這里錯過了什么?

使用joinWith 欲了解更多

例如,對於您的案例代碼:

Books::find()
    ->joinWith(['reviews' => function ($q) {
        $q->select(['COUNT(*) as cnt']);
    }])
    ->orderBy(['cnt' => 'DESC'])
    ->all();

編輯:我找到更好的解決方案。

Books::find()
    ->joinWith(['reviews'])
    ->select(['*', 'COUNT(reviews.*) as cnt'])
    ->groupBy('RELATION_FIELD(Example: reviews.book_id)')
    ->orderBy(['cnt' => 'DESC'])
    ->all();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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