学习笔记-Laravel 数据库 聚合+Join 查找语句。
2016-05-20 18:25
676 查看
在利用laravel处理数据库数据的时候 简单的聚合可以直接实现:
但是对于复杂的情况(比如join 后的结果,其结果并不是个objet)。就不能直接使用上述的方法
解决方法:
db::raw('')
实际代码:
聚合#
查询构造器也提供各式各样的聚合方法,如count,
max,
min,
avg及
sum。
使用聚合方法#
$users = DB::table('users')->count(); $price = DB::table('orders')->max('price'); $price = DB::table('orders')->min('price'); $price = DB::table('orders')->avg('price'); $total = DB::table('users')->sum('votes');
但是对于复杂的情况(比如join 后的结果,其结果并不是个objet)。就不能直接使用上述的方法
解决方法:
db::raw('')
Raw Expressions#
有些时候您需要使用 raw expression 在查询语句里,这样的表达式会成为字串插入至查询中,因此要小心勿建立任何 SQL 注入的攻击点。要建立 raw expression,您可以使用DB::raw方法:
使用 Raw Expression#
$users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get();
实际代码:
/** * sales deb export. * * @param * @return .csv * */ private function _salesDEBExport() { $objects = DB::table('orders') ->join('order_products','orders.id','=','order_products.order_id') ->join('products','order_products.product_id','=','products.id') ->leftJoin('categories','products.category_id','=','categories.id') ->select( 'orders.external_id', 'orders.address_billing_name', 'categories.customs_code', 'orders.external_sale_date', 'orders.invoice_external_id', 'orders.payment_method', 'orders.address_shipping_country', DB::raw(' SUM(order_products.amount_base) AS amount_base, SUM(order_products.amount_tax) AS amount_tax, SUM(order_products.amount_total) AS amount_total ') ) ->groupBy('orders.external_id','categories.customs_code') ->whereIn('orders.object_state_id', array(2,3)) ->where('orders.created_at', 'like', Input::get('year') . '-' . Input::get('month') . '-%') ->get(); if (empty($objects)) { Notification::error("Aucune donnée disponible."); return Redirect::to(URL::previous()); }else{ $headers = array( 'Content-Type' => 'text/csv', 'Content-Disposition' => 'attachment; filename="sales_deb_export_'.Input::get('month').'_'.Input::get('year').'.csv"', ); $output = rtrim(implode(',', array_keys((array) $objects[0]))) . "\n"; foreach($objects as $object) { $output .= rtrim(implode(',', (array) $object)) . "\n"; } return Response::make($output, 200, $headers); }
相关文章推荐
- php xml删除节点
- 介绍使用PHP框架的十大理由
- php xml修改节点中的属性和值
- PHP新手之学习类与对象
- php变量详解
- PHPMailer发送邮件demo示例
- PHP在Windows环境下安装Imagick扩展
- PHP开发者应了解的24个库
- php 在原有xml文件中追加节点
- 8 个必备的PHP功能开发
- PHP 代码优化技巧大盘点
- ViewPager+Fragment最优实现方案
- php 创建xml文件
- php魔术方法
- 安装xdebug并配置 php插件
- php图片裁剪函数
- php 生成条形码(基于yii)
- 快还要更快,让PHP 7 运行更加神速
- mac下去掉php55换成php70
- FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别