Laravel 关系的雄辩总和';单个查询中的s列

Laravel 关系的雄辩总和';单个查询中的s列,laravel,eloquent,Laravel,Eloquent,在这个查询中,我有三个表,例如radio,radio\u channels和radio\u channels\u files,我想将radio\u channels\u files表中的一列计算为新列,例如duration\u sum,我下面的代码工作,但我无法计算这个列 class Radio extends Model { use SoftDeletes; protected $guarded = ['id']; protected $casts = [

在这个查询中,我有三个表,例如
radio
radio\u channels
radio\u channels\u files
,我想将
radio\u channels\u files
表中的一列计算为新列,例如
duration\u sum
,我下面的代码工作,但我无法计算这个列

class Radio extends Model
{
    use SoftDeletes;

    protected $guarded = ['id'];
    protected $casts = [
        'logo_path' => 'array',
        'cover_path' => 'array'
    ];

    public function category()
    {
        return $this->belongsTo(RadioCategory::class);
    }

    public function channels()
    {
        return $this->hasMany(RadioChannels::class);
    }
}
    

class RadioChannelsFiles extends Model
{
    protected $guarded = ['id'];

    protected $casts = [
        'image' => 'array',
        //'keywords' => 'array',
    ];

    public function channel()
    {
        return $this->belongsTo(RadioChannels::class,'playlist_id');
    }
}

   

class RadioChannels extends Model
{
    protected $guarded = ['id'];

    protected $casts = [
        'image' => 'array'
    ];

    public function channel()
    {
        return $this->belongsTo(Radio::class);
    }

    public function files()
    {
        return $this->hasMany(RadioChannelsFiles::class , 'playlist_id');
    }

    public function duration_sum()
    {
        return $this->hasOne(RadioChannelsFiles::class ,'playlist_id')
            ->select('duration',
                DB::raw('sum(duration)')
            )->groupBy('duration');
    }
}


$channels = Radio::with(['category', 'channels' => function ($query) {
    $query->with(['files','duration_sum']);
}])->paginate(50);
我得到
null
输出:

#relations: array:2 [▼
     "files" => Illuminate\Database\Eloquent\Collection {#1422 ▶}
     "duration_sum" => null //should return sum of duration from files
     ]

我想我怎么才能得到它

public function getRadiosList(Request $request)
{
    $radios = Radio::with(['category', 'playLists' => function ($query) {
        $query->with(['files','duration_sum']);
    }])->get();

    return response()->json(['data' => $radios, 'statusCode' => 1], 200);
}
型号:

public function duration_sum()
{
    return $this->hasOne(RadioPlaylistsFiles::class, 'playlist_id')
        ->select('playlist_id',
            DB::raw('sum(duration) as `all_duration`')
        )->groupBy('playlist_id');
}

这回答了你的问题吗@frogeyedman我想是的,是的,我试着用这个solution@frogeyedman我不能,你能帮我吗?