DB类操作数据库
4、DB类操作数据库(重点)
按照MVC 的架构,对数据的操作应该放在 Model 中完成,但如果不使用Model,我们也可以用 laravel框架提供的 DB 类操作数据库。而且,对于某些极其复杂的sql,用Model 已经很难完成,需要开发者自己手写sql语句,使用 DB 类去执行原生sql。 laravel 中 DB 类的基本用法DB::table('tableName') 获取操作tableName表的实例(对象)。
4.1、数据库配置
4.1.1.修改evn文件
根目录下的.env文件主要是为本地数据库的配置信息
4.1.2.修改config目录下database.php文件
使用env函数,表示先从env文件里面获取,如果获取成功则使用,如果获取失败,则使用env函数的第二个参数。
(3)在Test控制器中引入DB门面;
use Illuminate\Support\Facades\DB;
4.2、增加信息(insert)
对数据库中的某个表增加数据主要有两个函数可以实现,分别是insert()和insertGetId()
insert(数组)可以同时添加一条或多条,返回值是布尔类型。
insertGetId(一维数组),只能添加一条数据,返回自增的id。
说明:数组里的元素要求是键值对的关系,键就是数据表中的字段名。
语法:DB::table('表名') -> insert()/insertGetId(); 连贯操作/链式操作
$res = DB::table("goods")->insertGetId(["goods_name"=>"黑米手机","goods_price"=>99]);
dd($res);
4.3、修改数据( update)
数据修改可以使用update()、increment()和decrement()方法来实现。
①Update方法表示可以修改整个记录中的全部字段;
②Increment和decrement表示修改数字字段的数值(递增或者递减),典型的应用:记录登录次数、积分的增加;
$res = DB::table("goods")->where(["id"=>5])->update(["goods_name"=>"白米手机"]);
dd($res);
返回值,表示受到影响的行数:
注意:where方法之后可以继续调用where之类的方法。
-> where() -> where() -> where().. 这个语法是并且(and)关系语法。
-> where() -> orWhere() -> orWhere()… 这个语法是或者(or)关系语法。
Orwhere方法的参数与where一致。
Where参数顺序:
-> where(字段名,运算符,字段值)。例如id=1,则可以写成:where(‘id’,’=’,1),简写成
Where(‘id’,1);【只有=号可以简写。】
扩展:
-> where([‘id’ => 1]);
注意:where与update方法的顺序是不能颠倒的,update必须在最后。
●自增,自减 increment()和decrement()
DB::table(' member')->where()->increment('age'); 每次+1
DB::table(' member')->increment('age', 5); 每次+5
DB::table(' member')->decrement('age'); 每次-1
DB::table(' member')->decrement('age', 5); 每次-5
4.4、删除数据(delete)【了解】
在删除中,有两种方式:物理删除(本质就是删除)、逻辑删除(本质是修改)
数据删除可以通过delete函数和truncate函数实现,
delete表示删除记录;
truncate表示清空整个数据表;
DB::table('table_name')->where('id','1')->delete();
清空表数据 truncate
语法:
DB::table('member') -> truncate();
5、查询数据(get)
(1)取出基本数据
案例1:获取member表中所有的数据
$rows = DB::table("goods")->get();
dd($rows);
返回值是一个集合对象,
测试:控制器方法中循环输出数据
循环结果:
foreach ($rows as $row){
echo $row->id,$row->goods_name,"<br>";
}
(2)取出单行数据
DB::table('goods')->where('id','1')->first();//返回值是一个对象
first方法等价于limit 1
$row = DB::table("goods")->first();
dd($row);
注意:first与get的区别,first返回值是一个对象,而get即便其查询出只有1条记录,其也是一个collection结果集
返回的是一个字符串。

DB::table("member")->pluck("username",'password');
(4)获取某些字段数据(多个字段)
$goods= DB::table('goods')->select('id', 'goods_name')->get(); count(*)
$goods = DB::table('goods')->select('goods_name user_name')->get();
$db -> select(DB::raw('name,age')) -> get(); // 不解析字段,原样使用
案例:获取id>2的记录中的姓名和邮箱字段sql:select id,goods_name,goods_price from goods where id > 2;
注意:有多少个字段就有多少个参数(select方法),除了DB::raw之外。
(5)排序操作
$row = DB::table("goods")->select('id','goods_name')->orderBy('id','desc')->get();
语法:orderBy(排序字段,排序规则)
asc:升序
desc:降序
(6)分页操作
$rows = DB::table("goods")->limit(2)->offset(2)->get();
Limit:表示限制输出的条数(分页中每页显示记录数)
Offset:从什么地方开始
组合起来等价于limit 2,3 limit 3(offset),2(length)
归纳:具体的查询等操作方法一般都是放在连贯操作的最后。辅助方法可以放在中间,并且其先后顺序是无所谓的。
6、执行任意的SQL语句(补充了解)
(1)执行原生查询语句
DB::select(“select语句”);
(2)执行原生插入语句
DB::insert("insert语句");
(3)执行原生修改语句
DB::update("update语句");
(4)执行原生删除语句
DB::delete("delete语句");
(5)执行一个通用语句(没有返回值的语句,例如:create table等)
DB::statement("语句");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)