У меня есть 4 таблицы: tv_shows
, tv_show_episodes
, languages
и languageables
У каждого телешоу может быть много языков по полиморфным отношениям. И я намерен фильтровать телешоу по языкам. тем временем я также сортирую телешоу по дате эфира.
TvShow::select([
'tv_shows.*',
'tv_show_episodes.id as episode_id',
'tv_show_episodes.name as episode_name',
'tv_show_episodes.air_date as episode_air_date',
'tv_show_episodes.season_number',
'tv_show_episodes.episode_number',
'tv_show_episodes.still_path',
])
->crossJoin('tv_show_episodes', 'tv_shows.id', '=', 'tv_show_episodes.tv_show_id')
->whereRaw('timestamp(concat(tv_show_episodes.air_date, " ", tv_shows.airs_time)) <= NOW()')
->orderByRaw('timestamp(concat(tv_show_episodes.air_date, " ", tv_shows.airs_time)) DESC')
->when($request->has('languages'), function($query) {
$query->whereHas('languages', function (Builder $query) {
$query->whereIn('iso_639_1', explode(',', request('languages')));
});
})->paginate(10)
TvShow.php
public function languages()
{
return $this->morphToMany(Language::class, 'languageable');
}
В конце я делю их на 10. Когда я вижу, что total
в порядке и возвращает правильное значение. но data
всегда пусто.
{
"current_page":1,
"data":[],
"from":null,
"last_page":1760,
"per_page":10,
"to":null,
"total":17600
}
И что интересно, когда я удаляю метод select()
из вышеприведенного запроса, все идет хорошо.
Мне нужна информация об этих эпизодах рядом с телешоу. и я хочу знать, в чем причина этого?