Laravel select() returns 具有多态关系和交叉连接的空值
Laravel select() returns empty value with Polymorphic relation and Cross Join
我有 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
很好并且 returns 正确的 value.but data
总是空的。
{
"current_page":1,
"data":[],
"from":null,
"last_page":1760,
"per_page":10,
"to":null,
"total":17600
}
有趣的是,当我从上面的查询中删除 select()
方法时,一切正常。
除了电视节目,我还需要那些剧集信息。我想知道这是什么原因?
试试下面的答案,
TvShow::selectRaw('`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
是您的模型。
希望这对你有帮助。
我有 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
很好并且 returns 正确的 value.but data
总是空的。
{
"current_page":1,
"data":[],
"from":null,
"last_page":1760,
"per_page":10,
"to":null,
"total":17600
}
有趣的是,当我从上面的查询中删除 select()
方法时,一切正常。
除了电视节目,我还需要那些剧集信息。我想知道这是什么原因?
试试下面的答案,
TvShow::selectRaw('`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
是您的模型。
希望这对你有帮助。