两个日期之间的差异 - illuminate manager laravel

difference between 2 dates - illuminate manager laravel

我制作了一个电视节目表,我需要对相隔超过 600 秒的日期进行排序

但它不起作用;(

有人知道怎么做吗?

非常感谢那些愿意帮助我的人。

$dateMin = Carbon::now('Europe/Paris')
    ->endOfDay()
    ->addDay()
    ->addHours(-4)
    ->timestamp;
    
$dateMax = Carbon::now('Europe/Paris')
    ->endOfDay()
    ->addDay()
    ->timestamp;

$datas = Capsule::table('channels')
    ->select('channels.number',
        'channels.slug',
        'channels.display-name',
        'channels.icon',
        'programs.start',
        'programs.stop',
        'programs.title',
        'programs.img',
        'programs.thumbnail',
        'programs.desc'
    )
    ->where([
        ['start', '>', $dateMin],
        ['stop', '>', $dateMin],
        ['start', '<', $dateMax],
    ])
    ->whereRaw('stop - start > 601')
    ->leftJoin('programs', 'channels.slug', '=', 'programs.slug')
    ->orderBy('number')
    ->orderBy('start')
    ->get();

    return $datas->groupBy('display-name');

没有太多上下文,我唯一能想到的就是尝试在 where 子句中对参数进行分组

$datas = Capsule::table('channels')
    ->select('channels.number',
        'channels.slug',
        'channels.display-name',
        'channels.icon',
        'programs.start',
        'programs.stop',
        'programs.title',
        'programs.img',
        'programs.thumbnail',
        'programs.desc'
    )
    ->where(function($query) use($dateMin,$dateMax) {
        $query->where([
            ['start', '>', $dateMin],
            ['stop', '>', $dateMin],
            ['start', '<', $dateMax],
        ])
        ->whereRaw('stop - start > 601')
    })
    ->leftJoin('programs', 'channels.slug', '=', 'programs.slug')
    ->orderBy('number')
    ->orderBy('start')
    ->get();

如果这不起作用,请尝试为两者转储查询 sql,不带参数分组(您问题中的代码)和带参数分组(我的答案中的代码)并查看 sql 语句生成。您可以使用 toSql() 代替 get().

来获取查询 sql