Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在关系模型的Yii2活动记录中使用JOIN?_Php_Mysql_Activerecord_Yii2 - Fatal编程技术网

Php 如何在关系模型的Yii2活动记录中使用JOIN?

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表与评论具有一对多关系

我想搜索书籍并按评论对它们进行排序

例如,如果有10本书可用,并且书评中有review,那么我想使用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]:未找到列:“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();

谢谢但是在这里,我需要计算每本书的总评论数,然后根据评论数对书单进行排序。嗨,谢谢。我已经更新了问题。请你看一下最新的。谢谢