Laravel sql查询..如果条件在Where中

时间:2016-11-29 13:59:08

标签: php mysql laravel builder

我刚开始学习Laravel并将常规PHP代码转换为Laravel。 我需要在Laravel中执行此查询,但失败了。

SELECT sum(qty_del) as delivery from delivery_sap a where YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017

这是我提出的,但它很糟糕。

$data = DB::table('delivery_sap')
          ->select(DB::raw('sum(qty_del) as delivery'))
          ->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017');

根据以下答案更正了查询

$data = DB::table('delivery_sap')
      ->select(DB::raw('sum(qty_del) as delivery'))
      ->whereRaw('YEAR(bill_date) + IF(MONTH(bill_date)>6, 1, 0) = 2017')
      ->first();

从get()更改为first,因为我希望它作为一行返回

1 个答案:

答案 0 :(得分:2)

您可以通过查询构建器转储生成的查询,并将其与原始查询进行比较:

b

它返回:

use Illuminate\Support\Facades\DB;

$query = DB::table('delivery_sap')
    ->select(DB::raw('sum(qty_del) as delivery'))
    ->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017');

dd($query->toSql());

这与您的原始查询几乎完全相同。您需要使用最终"select sum(qty_del) as delivery from `delivery_sap` where YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017" 对调用进行链接以检索结果:

get()