Laravel的多个人加入

时间:2015-03-09 07:36:54

标签: mysql laravel laravel-5

我有:

$buyingNet = DB::table('parts_enquiries_buying AS PEB')
            ->select(DB::raw('SUM((PEB.quantity*PEB.net)/IF(ISNULL(currencyRate), rate, currencyRate)) AS total'))
            ->join('currencies_rates AS CR', function ($q) {
                $q->on('CR.id', '=', 'PEB.currencyId')
                    //->where(DB::raw('YEAR(CR.date)'), '=', date('Y'))
                    ->where(DB::raw('MONTH(CR.date)'), '=', date('m'));
            })
            ->leftJoin('jobs', 'jobs.enquiryId', '=', 'PEB.enquiryId')
            ->leftJoin('invoices_out AS IO', 'IO.jobId', '=', 'jobs.id')
            ->where('PEB.enquiryId', $enquiryId)
            ->first()->total;

如果我取消注释匹配年份的位置,我会返回null,但应该存在的所有行都存在。

我的语法是否正确?它应翻译为:

... YEAR(CR.date) = ? AND MONTH(CR.date) =? ...

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是“查询”构建器无法理解DB::raw子句中的->where语句。

你应该这样做:

->whereRaw("YEAR(CR.date) = '". date('Y')."'")
->whereRaw("MONTH(CR.date) = '". date('n')."'")

对于月份子句,您需要使用n而不是m,因为MySQL MONTH会返回低于10的月份的单个数字。