3分钟短文:Laravel 使用DB门面操作原生SQL
时间:2022-07-24
本文章向大家介绍3分钟短文:Laravel 使用DB门面操作原生SQL,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
引言
我们推荐使用laravel的eloquent orm 模型操作数据库表, 因为特性更为丰富,组装更为灵活,在编程层面操作数据的来来去去非常直观。而有些场景不可避免地与原生交互,我们本期就来梳理一下DB门面相关的那些方法。
学习时间
系统提供了DB门面用于原生的SQL操作,在程序内引入下面的类:
use IlluminateSupportFacadesDB;
该类的定义很简单,标准的门面注册方法:
class DB extends Facade
{
protected static function getFacadeAccessor()
{
return 'db';
}
}
仅实现了 getFacadeAccessor 方法,这些类处于同一个命名空间下的 Facade.php 文件内。
DB门面既可以使用query builder的链式操作,也可以用于执行原生查询。举几个例子。比如删除users表:
DB::statement('drop table users');
带参数绑定的SQL查询语句:
DB::select('select * from contacts where validated = ?', [1]);
或者使用链式操作,获取所有满足条件的记录:
$users = DB::table('users')->get();
当然了,还有经常用到的多表联合查询,复杂的查询过滤条件:
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')->where('contacts.type', 'donor');
})
->get();
CRUD
上一节是一些简单示例,下面我们说一说增删改查的用法。先说查询语句, 如果在数据库优化上做的比较好的一些SQL固定写法,可以使用原生方法固化下来。比如简单的:
$users = DB::select('select * from users');
该方法会返回一个标准对象的集合。扩展一下,带有查询条件的SQL原生语句, 为了防止SQL注入,使用参数绑定的方式:
$usersOfType = DB::select('select * from users where type = ?', [$type]);
当然也可以使用PDO常用的方式占位:
$usersOfType = DB::select('select * from users where type = :type', ['type' => $userType]);
插入新数据,其实与上述的带有占位符参数绑定的SQL查询语句类似,只是SQL语法不同而已:
DB::insert('insert into contacts (name, email) values (?, ?)', ['salt', 'salt@lot.com']);
更新数据也是一样的:
$countUpdated = DB::update('update contacts set status = ? where id = ?', [1, $id]);
当然了,删除语句仅仅需要where子句的条件参数绑定,其他与查询select无异:
$countDeleted = DB::delete('delete from contacts where archived = ?', [1]);
写在最后
本文通过对laravel DB门面的增删改查用法,向大家展示了基本的参数绑定的用法。一般我们不推荐使用原生SQL语句操作数据库,提倡大家把数据库操作集中到模型层, 充分利用eloquent orm的性能。
Happy coding :-)
我是@程序员小助手,持续分享编程知识,欢迎关注。
- 百度人脸识别API Java调用
- Java Socket Timeout总结
- 求一个数组中子数组的最大和算法(Java实现)
- JDBC批量提交SQL的几点问题解答
- 工具推荐: 汽车CAN总线分析框架CANToolz
- Windows下jps, jconsole无法查看本地java进程问题解决
- DateFormat 线程不安全
- zip文件操作导致JVM crash
- 如何搭建你自己的“深度学习”机器?
- MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用
- 通过Java代码来模拟乘法器
- INET_ATON()函数在MySQL5.6版本和5.7版本的差异
- Linux主机之间ssh免密登录配置
- 远控木马Posion Ivy开始肆虐缅甸和其它亚洲国家
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- JVM垃圾回收之垃圾回收器,程序员必须掌握的知识
- 5分钟Flink - 时间与语义案例详解
- 5分钟Flink - 时间语义和Watermark
- 3. Pandas系列 - DataFrame操作
- 4. Pandas系列 - 基本功能和统计操作
- 面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》
- 无所不能的Embedding 2. FastText词向量&文本分类
- 5. Pandas系列 - 重建索引
- 6. Pandas系列 - 迭代
- Java 虚拟机基础原理:功能,内存管理,类的加载机制,分析字节码执行过程
- Stack有性能问题?推荐用ArrayDeque队列!队列是什么?什么是双端队列、延迟系列、阻塞队列,全是知识盲区!
- 纯CSS实现照片墙效果
- Tungsten Fabric知识库丨构建、安装与公有云部署
- 7. Pandas系列 - 排序和字符串处理
- JVM调优,程序员必须掌握的知识