我正在尝试按视频观看次数对连续剧进行排序。

关系: 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'); 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!