【问题标题】:Error in Laravel joinLaravel 连接出错
【发布时间】:2018-11-12 09:02:28
【问题描述】:

我正在尝试使用连接从 2 个表中获取结果,我想要这 2 个表的时间范围之间的结果,

这是我的代码

$final_trade = DB::table('finaltrade')
        ->join('exchanges', function($join)
        {
            $join->on('exchanges.id', '=', 'finaltrade.exchange_id')
                ->where('finaltrade.user_id', '=', Auth::user()->id)
                ->whereTime('finaltrade.created_at', '=', 'exchanges.start_time');
        })
        ->get();

当我添加硬编码的时间值而不是“exchanges.start_time”时,它会给出正确的结果,但我想从列中添加值,

【问题讨论】:

    标签: sql join laravel-5


    【解决方案1】:

    错误的代码是->whereTime('finaltrade.created_at', '=', 'exchanges.start_time');改成->whereColumn('finaltrade.created_at', '=', 'exchanges.start_time');

    更正的代码是

    DB::table('finaltrade')
        ->join('exchanges', function($join) {
            $join->on('exchanges.id', '=', 'finaltrade.exchange_id')
                ->where('finaltrade.user_id', '=', Auth::user()->id)
                ->whereColumn('finaltrade.created_at', '=', 'exchanges.start_time');
        })->get();
    

    【讨论】:

    • 两者不能相等,因为 created_at 是日期时间,而 start_time 是时间字段
    • 我不知道好吗!
    • 感谢您的帮助,这在其他情况下可能是有用的信息
    • 如果可以,我可以在 DB::raw('exchanges.start_time') 中添加 1 小时吗?
    【解决方案2】:

    你必须告诉 Laravel 它不是一个值,而是一个列名:

    ->whereTime('finaltrade.created_at', '=', DB::raw('exchanges.start_time'));
    

    【讨论】:

    • 如果可以,我可以在 DB::raw('exchanges.start_time') 中添加 1 小时吗?
    • 试试DB::raw("ADDTIME(exchanges.start_time, '01:00:00')")
    • 看起来可行,但假设当前值为 9:30:00,添加 1 小时后应为 10:30:00,我的值为 10:20:00 它不包括它但包括 9:49:00
    • 我们也可以减去时间,对吧?使用 SUBTIME() ?
    • 第一个小时和最后一个小时,它已经完成了,但现在我通过跳过第一个小时和最后一个小时来完成剩余的几个小时,但它给出了空的结果,我可以在 db 中看到数据
    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2016-05-24
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多