09月02, 2018

laravel 数据库查询时where语句使用mysql函数

有时候我们需要在数据库查询的时候使用MySQL的函数,这个时候要是用Laravel就需要使用whereRaw()函数来操作了。

先看代码:

DB::table('orders')
     ->join('dining_record', 'dining_record.order_id', '=', 'orders.id')
     ->join('menu', 'menu.id', '=', 'dining_record.food_id')
     ->whereRaw('left(orders.order_sn, 1) = "O" ')
     ->get();

我们有一个订单表order,表结构如下:

+-----+---------+-------+--------+----------------------+---------------------+---------------------+----------------+
| id  | user_id | money | status | order_sn             | created_at          | updated_at          | original_money |
+-----+---------+-------+--------+----------------------+---------------------+---------------------+----------------+
| 131 |       3 |   600 |      1 | O2018042424531296201 | 2018-04-24 08:54:56 | 2018-04-24 08:55:12 |        1900.00 |
| 132 |       4 |   600 |      1 | O2018042424540029377 | 2018-04-24 11:20:29 | 2018-04-24 11:20:38 |        1900.00 |
| 133 |      14 |   600 |      2 | O2018042424540256430 | 2018-04-24 11:24:16 | 2018-04-24 11:40:01 |        1900.00 |
| 134 |      14 |   600 |      1 | O2018042424540286293 | 2018-04-24 11:24:46 | 2018-04-24 11:24:55 |        1900.00 |
| 135 |      15 |  2200 |      1 | O2018042424541499185 | 2018-04-24 11:44:59 | 2018-04-24 11:45:08 |        7000.00 |
| 136 |      29 |   600 |      1 | O2018042424542309537 | 2018-04-24 11:58:29 | 2018-04-24 11:58:42 |        1900.00 |
| 137 |      12 |   600 |      1 | O2018042424542352868 | 2018-04-24 11:59:12 | 2018-04-24 11:59:35 |        1900.00 |
| 138 |      17 |   200 |      1 | O2018042424542469364 | 2018-04-24 12:01:09 | 2018-04-24 12:01:19 |         600.00 |
| 139 |       7 |   200 |      1 | O2018042424542555636 | 2018-04-24 12:02:35 | 2018-04-24 12:02:51 |         600.00 |
| 140 |      10 |   200 |      1 | O2018042424542752502 | 2018-04-24 12:05:52 | 2018-04-24 12:05:59 |         600.00 |
+-----+---------+-------+--------+----------------------+---------------------+---------------------+----------------+


其中,order_sn字段为订单号,订单号的首字母为区分不同类型的订单。如果我们想查询首字母为O的订单,用原生语句就这么写:


SELECT order_sn FROM orders WHERE LEFT(order_sn, 1) = 'O'

其中left()函数为MySQL截取字符串的函数。

如果用laravel来表示就是:


DB::table('orders')
     ->join('dining_record', 'dining_record.order_id', '=', 'orders.id')
     ->join('menu', 'menu.id', '=', 'dining_record.food_id')
     ->whereRaw('left(orders.order_sn, 1) = "O" ')
     ->get();

本文链接:http://blog.guansixu.cn/post/laravel-mysql-function.html

-- EOF --

Comments