从 Yii2 中的相关表中订购表

问题描述

我有一个名为 "video" 的表,其中没有 "likes",因为我创建了另一个"video-like" 来将每个 like 连接到 "user"。 但我想按喜欢对视频进行排序,但我不知道该怎么做。

我正在使用 Yii2 框架和 Postgresql

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

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

任何帮助都是有用的!

解决方法

您可以有 2 个嵌套选择。

$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