输出原生sql:
DB::table('users')->where([['name','=','张三']])->toSql(); //输出sql为:select * from users where name=?;
DB::table('users')->where([['name','=','张三']])->getQuery(); //输出sql为:select * from users where name='张三';
运行原生sql查询:
$users = DB::select('select * from users where name = ?', ['张三']);
对于whereIn Query的写法:
//原生写法 DB:selectOne("select sum(price) from order_code where code_no in ( select code_no from delivery where create_time<:time )", [ "time"=>"2019-01-30" ]);//selectOne 查一条 select查多条 返回为数组 //构造器写法 DB::table("order_code")->whereIn("id", function($query){ $query->select('id')->from('delivery')->where([ ["id", ">", 1] ]); })->get();//返回为ObjectClass对象 可以使用toArray将结果转为数组
另:对于whereIn array的想多说一点,最好将数组元素转为对应的字段的字符类型,不然会影响执行效率,比如:code_no为String类型,数组元素$arr=[092378,67222],去whereIn时会慢很多,但如果是$arr=['092378','67222'],执行时间会减少很多,大家都可以亲自测试一下。
运行原生sql部分参考文档:https://laravel.com/docs/5.7/database
输出原生sql部分参考文档:https://blog.csdn.net/Tim_phper/article/details/78606253