有时候我们需要在数据库查询的时候使用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();
Comments