我有:
$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) =? ...
答案 0 :(得分:1)
我认为这里的问题是“查询”构建器无法理解DB::raw
子句中的->where
语句。
你应该这样做:
->whereRaw("YEAR(CR.date) = '". date('Y')."'")
->whereRaw("MONTH(CR.date) = '". date('n')."'")
对于月份子句,您需要使用n
而不是m
,因为MySQL MONTH
会返回低于10的月份的单个数字。