Laravel-SQLSTATE [42000]-UNION

时间:2018-07-23 14:25:33

标签: sql laravel

我正在这两个查询之间建立一个UNION:

$first = 
    DB::table('pedido')
    ->select(DB::raw('date(fecha_pago) as fecha'),DB::raw('sum(subtotal) as ingreso'),DB::raw('0 as egreso'))
    ->where('idestado','=','2')
    ->groupBy(DB::raw('date(fecha_pago)'));

$second = 
    DB::table('egreso')
    ->select(DB::raw('date(fecha) as fecha'),DB::raw('0 as ingreso'),DB::raw('sum(monto) as egreso'))
    ->groupBy(DB::raw('date(fecha)')); 

$final_query= 
    DB::select(DB::raw('date(fecha),sum(ingreso) as ingreso,sum(egreso) as egreso'))
    ->union($first)->union($second)
    ->groupBy(DB::raw('date(fecha)'))
    ->get();

我得到了错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有一个错误;请参见语法。在第1行(SQL:date(fecha),sum()中,检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在“ date(fecha),sum(ingreso)as ingreso,sum(egreso)as egreso”附近使用ingreso)为ingreso,sum(egreso)为egreso)

1 个答案:

答案 0 :(得分:0)

DB::select()执行原始查询,与DB::table()->select()不同,DB::table()用于定义查询构建器选择的字段。

您在最终查询中缺少date(fecha),sum(ingreso) as ingreso,sum(egreso) as egreso,如果没有它,您将不会使用查询生成器,而实际上将仅运行<?php $value = 2; $text = rawurlencode("www.domain.com/products.php?productId=".$value); ?> <a href="https://api.whatsapp.com/send?text=<?php echo $text; ?>"><i class="fa fa-whatsapp"></i></a>

https://laravel.com/docs/5.6/queries#selects