我正在尝试按视频观看次数对连续剧进行排序。
关系: Serial 与 series 有 hasMany 关系。 该系列与剧集有很多关系。 Episodes 与视频具有 hasOne 关系。 视频与观看次数有很多关系。
<?php
//sort method:
public function mostPopular()
{
$serials = Serial::with(['series.episodes.video' => function ($query) {
$query->withCount(['videoViews' => function($query) {
}])->orderBy('video_views_count', 'desc');
}])->get();
return $serials;
}
//Serial model:
public function series()
{
return $this->hasMany(Series::class);
}
//Series model:
public function episodes()
{
return $this->hasMany(Episode::class);
}
public function serial()
{
return $this->belongsTo(Serial::class);
}
//Episode model:
public function video()
{
return $this->hasOne(Video::class);
}
public function series()
{
return $this->belongsTo(Series::class);
}
//Video model:
public function videoViews()
{
return $this->hasMany(VideoView::class);
}
public function episode()
{
return $this->belongsTo(Episode::class);
}
?>
我希望按视频观看次数 (series.episodes.video.videoViews) 排序连续剧,但实际输出未排序。
Laravel 5.8 PHP 7
请您参考如下方法:
这实际上是一个愚蠢的做法,但我了解到,实际上可以在没有解决方法的情况下对集合使用多个 ->sortBy。只是你需要颠倒它们的顺序。因此,要根据专辑名称对艺术家目录进行排序,这就是解决方案...
代替:
$collection->sortBy('artist')->sortBy('title');
这样做:
$collection->sortBy('title')->sortBy('artist');