【问题标题】:Laravel select() returns empty value with Polymorphic relation and Cross JoinLaravel select() 使用多态关系和交叉连接返回空值
【发布时间】:2020-02-19 16:08:25
【问题描述】:

我有 4 个表:tv_showstv_show_episodeslanguageslanguageables

每个电视节目都可能通过多态关系有多种语言。 我打算按语言过滤电视节目。同时我也在按照剧集的播出日期对电视节目进行排序。

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() 方法时,一切正常。

我需要电视节目旁边的那些剧集信息。我想知道这是什么原因?

【问题讨论】:

  • 你能告诉你paginate吗?

标签: php laravel eloquent laravel-5.8


【解决方案1】:

试试下面的答案,

  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 是您的模型。 希望这对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多