PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Laravel教程 > 正文

    Laravel query builder 使用子查询

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:Laravel query builder 使用子查询
    需求1:

    1. SELECT COUNT(*) FROM  (SELECT * FROM abc GROUP BY col1) AS a; 

    执行代码

    1. $sub = Abc::where(..)->groupBy(..); // Eloquent Builder instance 
    2.  
    3. $count = DB::table( DB::raw("({$sub->toSql()}) as sub") ) 
    4.     ->mergeBindings($sub->getQuery()) // you need to get underlying Query Builder 
    5.     ->count(); 

    需求2: 执行如下代码
     

    1. SELECT  
    2.     `p`.`id`, 
    3.     `p`.`name`,  
    4.     `p`.`img`,  
    5.     `p`.`safe_name`,  
    6.     `p`.`sku`,  
    7.     `p`.`productstatusid`  
    8. FROM `products` p  
    9. WHERE `p`.`id` IN ( 
    10.     SELECT  
    11.         `product_id`  
    12.     FROM `product_category` 
    13.     WHERE `category_id` IN ('223''15'
    14. AND `p`.`active`=1 

    实现:
     

    1. Products::whereIn('id'function($query){ 
    2.     $query->select('paper_type_id'
    3.     ->from(with(new ProductCategory)->getTable()) 
    4.     ->whereIn('category_id', ['223''15']) 
    5.     ->where('active', 1); 
    6. })->get(); 

    综合运用:

     

    1. $query = \DB::table('message'
    2.     ->where(function ($query) use ($userId) { 
    3.         $query->where([ 
    4.             ['receiver_id''='"$userId"], 
    5.             ['type''=', Messages::PRIVATE_MESSAGE], 
    6.         ]); 
    7.     }); 
    8. if (!empty($groupIds)) { 
    9.     $query->orWhere(function ($queryq) use ($groupIds) { 
    10.         $queryq 
    11.             ->where([ 
    12.                 ['type''=', Messages::GROUP_MESSAGE], 
    13.                 ['message.created_at''>', \Auth::user()->created_at] 
    14.             ]) 
    15.             ->whereIn('receiver_id', $groupIds); 
    16.     }); 
    17. /* 获取广播 */ 
    18. $query->orWhere(function ($query) { 
    19.     $query 
    20.         ->where([ 
    21.             ['type''=', Messages::BROADCAST_MESSAGE], 
    22.             ['dead_line''>', Carbon::createFromTimestamp(time())], 
    23.             ['message.created_at''>', \Auth::user()->created_at] 
    24.         ]); 
    25. }); 
    26. $query->leftJoin('message_log'function ($join) use ($userId) { 
    27.     $join->on('message.id''=''message_log.message_id'
    28.         ->where('message_log.user_id''=', $userId); 
    29. }) 
    30.  
    31.     ->leftJoin('subscribe'function ($join)  use ($userId) { 
    32.         $join->on('subscribe.pcode_id''=''message.receiver_id'
    33.             ->where('subscribe.user_id''=', $userId); 
    34.     }) 
    35.  
    36.     ->select([ 
    37.         'message_log.id as message_log_id'
    38.         'message.id as message_id'
    39.         'message.content'
    40.         'message.type'
    41.         'message.sender_id'
    42.         'message.updated_at'
    43.         'message.created_at'
    44.         'message.dead_line'
    45.         \DB::raw('IF (message.`created_at` < subscribe.`created_at` , 1, 0) AS is_expired'
    46.     ]); 
    47.  
    48. $resQuery = \DB::table(\DB::raw("({$query->toSql()}) as sub")) 
    49.     ->mergeBindings($query) 
    50.     ->where('is_expired''=', 0); 

     

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-153-5554-1.html
    相关热词搜索: