Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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中的相关表中订购表_Php_Postgresql_Yii2_Yii2 Advanced App - Fatal编程技术网

Php 从Yii2中的相关表中订购表

Php 从Yii2中的相关表中订购表,php,postgresql,yii2,yii2-advanced-app,Php,Postgresql,Yii2,Yii2 Advanced App,我有一个名为“video”的表,其中没有“likes”,因为我创建了另一个表“video like”,将每个like加入“user”。 但是我想按喜好对视频进行排序,我不知道怎么做 我正在使用Yii2框架和PostgreSQL 在本例中,我创建了一个从新视频到旧视频排序的查询。这很容易,因为我不必访问另一个表来完成它 $this->orderBy(['created_at' => SORT_DESC]); 任何帮助都是有用的 您可以有两个嵌套的select $query = Mod

我有一个名为
“video”
的表,其中没有
“likes”
,因为我创建了另一个表
“video like”
,将每个like加入
“user”
。 但是我想按喜好对视频进行排序,我不知道怎么做

我正在使用Yii2框架和PostgreSQL

在本例中,我创建了一个从新视频到旧视频排序的查询。这很容易,因为我不必访问另一个表来完成它

$this->orderBy(['created_at' => SORT_DESC]);

任何帮助都是有用的

您可以有两个嵌套的select

$query = Model()::find();
$subQuery = ModelLikes()::find()
            ->select("COUNT(*) AS amount")
            ->groupBy([
                ModelLikes::tableName() . '.source_id'
            ])
            ->orderBy(['amount' => SORT_DESC]);
$query->leftJoin(['T' => $subQuery],
            Model::tableName() . ".id= T.source_id");
$data = $query->all();
您应该根据您的模型更改模型的名称和字段

source_id是表中视频的id


请发布您试图实现的任何代码以获得结果。非常感谢您的回复,但我对如何实现它有点困惑,我从未见过dots以这种方式使用。。。我试图用video_id替换source_id,它是viedo_likes表中的video id,每个“模型”都有各自的模型。但是当我运行它时,它说video.id不存在。正在执行的SQL是:选择“video”。*从“video”左连接(选择COUNT(*)作为“amount”,从“video”组按“video”组按“video”组按“video”组按“video”组按“amount”组按“DESC”排序。id=T.video_-idIn yii2,每个模型都有一个带有
tableName()
name的方法,所以除了直接使用表名之外,您还可以使用它