gpt4 book ai didi

mysql - 如何在 Yii2 的一个查询中获取相关表中字段的总和

转载 作者:可可西里 更新时间:2023-11-01 07:52:19 25 4
gpt4 key购买 nike

各位,我有 2 个表,通过第三个相关:结构如下所示:

Playlist: id, channel_id, name, date
Files: id, name, duration
Playlist-rel-Files: list_id, file_id

我在我的应用程序中使用 ActiveRecord。当我使用这样的查询来获取最后一个播放列表时:

$pl = Playlist::find()
->where(['channel_id' => $model->channel_id])
->orderBy(['date' => SORT_DESC])
->limit(1)
->one();

然后我使用这样的代码来获取与上一个播放列表相关的所有文件:

$f = $pl->files;

一切正常,我得到了文件数组,但我不需要它们的列表,我只需要文件持续时间的总和,要得到这个总和,我需要在 foreach 中遍历数组,我的问题是:

我如何修改我的第一个查询以在一个查询中获取播放列表数据和该播放列表文件的持续时间总和?可能吗?

最佳答案

您正在寻找的是统计查询。您可以为您的计数定义一个新的关系,例如

public function getFileCount() {
return $this->hasMany(Files::className(), ['id' => 'file_id'])
->viaTable('playlist-rel-files', ['playlist_id' => 'id'])
->sum('duration');
}

然后可以使用魔术属性 $fileCount 访问它,并且可以通过 with 添加到查询中以进行预加载,即:

$pl = Playlist::find()
->with('fileCount')
->where(['channel_id' => $model->channel_id])
->orderBy(['date' => SORT_DESC])
->one();

关于mysql - 如何在 Yii2 的一个查询中获取相关表中字段的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28382209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com