如何在Yii2活动记录中使用JOIN进行关系模型


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

我有两个表,叫做Books and Reviews。Books表和Reviews有一对多的关系。

我想搜索书籍并按评论进行排序。

例如,如果有10本书可用,并且Reviews中有书评,那么我想通过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 clause"中的未知列"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();