• laravel 随笔小结


    1、控制器try-catch包容样式,基本结构默认书写,验证+验证失败+代码实现,catch抛出异常:Log::error('快递公司[编辑]失败|执行时间:' . Carbon::now()->toDateTimeString() . "|错误文件:" . $e->getFile() . "|错误行号:" . $e->getLine() . "|错误原因:" . $e->getMessage());

    2、路由设置和控制器名结和,不显示id数据,所用id以参数方式前端提交;

    3、默认索引添加,关联字段,where查询字段,默认可以以created_at以及各种关联ID为主,日期以默认三个月为前提:

    # 日期
    if (request('start_time') && request('end_time')) {
    $startTime = Carbon::parse(request('start_time'))->startOfDay()->toDateTimeString();
    $endTime = Carbon::parse(request('end_time'))->endOfDay()->toDateTimeString();
    $query->whereBetween('business_orders.meet_begin_at', [$startTime, $endTime]);
    }
    # 默认最近三个月
    $query->whereBetween('business_orders.created_at', [Carbon::now()->firstOfMonth()->subMonth(3)->toDateTimeString(), Carbon::now()->endOfDay()->toDateTimeString()]);
    4、路由规定名称,以订单为例,不同种类订单定义不同路由name,对应控制器$request->route()->getName()查询路由别名,分类查询数据显示;
    5、控制器多字段搜索:
    if (request('search_universal') && request('search_type')) {
    switch (request('search_type')) {
    case "out_business_order_number":
    $query->whereIn('business_orders.out_business_order_number', array_filter(explode('&',preg_replace("/(,|,|s)/",'&',request('search_universal')))));
    break;
    6、数据库查询,关联主表id使用leftJoin关联查询,多表关联使用join+关联ID;

    7、模型定义数据库属性名查询,eg:whereOrderStatus(OrderStatus::CREATED),默认使用,不用定义;

    8、whereColumn 方法用于比较两个字段的值 是否相等:也可以传入一个比较运算符和and运算符链接;

    9、group_concat()的用法(整合group by及order by):
      功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
      语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
      说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
      
      concat()函数用法(数据库查询地址栏常用):
      
    功能:将多个字符串连接成一个字符串。
      语法:concat(str1, str2,...)
      返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
    10、leftjoin高级查询应用——传递一个 闭包 作为 join 方法的第二个参数。此闭包接收一个 JoinClause 对象,从而指定 join 语句中指定的约束:
        DB::table('users')->join('contacts', function ($join){
          $join->on('users.id', '=', 'contacts.user_id')
            ->where('contacts.user_id', '>', 5);
        })->get();

    11、查询构造器悲观锁使用,
    若想在查询中实现一个「共享锁」,可以使用 sharedLock 方法。 共享锁可防止选中的数据列被篡改,直到事务被提交为止 :DB::table('users')->where('votes', '>', 100)->sharedLock()->get();或者,你可以使用 lockForUpdate 方法。使用 「update」锁可避免行被其它共享锁修改或选取:DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();
        eg:$expressOrder = ExpressOrder::query()->where('express_order_number', $expressOrderNumber)->lockForUpdate()->first();
     


  • 相关阅读:
    方维P2P  二次开发
    Array 数组去重 总结10方法(7)
    PHP  OOP学习总结
    [转载]js:数组里面获取键名和键值
    Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
    在Apache服务器上启用GZip压缩静态内容的方法
    PHP 程序授权验证开发思路
    【转】zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
    公钥私钥,HTTPS,CA证书机构,单向和双向认证
    Array对象的方法实现(5)----Array.prototype.includes(实现常规参数的功能)
  • 原文地址:https://www.cnblogs.com/hjcan/p/11417926.html
Copyright © 2020-2023  润新知