Php 如何在关系模型的Yii2活动记录中使用JOIN?
我有两张桌子,叫做书和评论。Books表与评论具有一对多关系 我想搜索书籍并按评论对它们进行排序 例如,如果有10本书可用,并且书评中有review,那么我想使用WHERE子句查找所有的书,并计算这些书评,然后根据书评编号订购所有的书 我的SQL查询如下所示:Php 如何在关系模型的Yii2活动记录中使用JOIN?,php,mysql,activerecord,yii2,Php,Mysql,Activerecord,Yii2,我有两张桌子,叫做书和评论。Books表与评论具有一对多关系 我想搜索书籍并按评论对它们进行排序 例如,如果有10本书可用,并且书评中有review,那么我想使用WHERE子句查找所有的书,并计算这些书评,然后根据书评编号订购所有的书 我的SQL查询如下所示: Books::find() ->where([ 'and', ['like', 'books.bookName', $bookName], ['like', 'books.status', '
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]:未找到列:“order子句”中的1054未知列“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();
谢谢但是在这里,我需要计算每本书的总评论数,然后根据评论数对书单进行排序。嗨,谢谢。我已经更新了问题。请你看一下最新的。谢谢