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我不能,你能帮我吗?