四、DB类操作数据库(重点)
按照MVC 的架构,对数据的操作应该放在 Model 中完成,但如果不使用Model,我们也可以用 laravel框架提供的 DB 类操作数据库。而且,对于某些极其复杂的sql,用Model 已经很难完成,需要开发者自己手写sql语句,使用 DB 类去执行原生sql。 laravel 中 DB 类的基本用法DB::table(‘tableName’) 获取操作tableName表的实例(对象)。
1、数据表的创建与配置
建立数据库:
代码语言:javascript复制建数据库的方式:
①sql语句
②图形界面 phpMyAdmin Navicat
或者:
(1)创建数据库和测试表
代码语言:javascript复制create table member(
id int primary key auto_increment,
name varchar(32) not null,
age tinyint unsigned not null,
email varchar(32) not null
)engine myisam charset utf8mb4;
(2)数据库在laravel框架中的配置 在.env文件里面,
也可以在config目录下面的database.php文件里面配置。使用env函数,表示先从env文件里面获取,如果获取成功则使用,如果获取失败,则使用env函数的第二个参数。
注意:如果是php artisan serve方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件;如果是wamp/lamp等环境则不需要重启。
(3)在Test控制器中引入DB门面;
(4)定义增删改查需要的路由;
代码语言:javascript复制增加:/add get
删除:/del get
修改:/mod get
查询:/select get
2、增加信息(insert)
对数据库中的某个表增加数据主要有两个函数可以实现,分别是insert()和insertGetId()
代码语言:javascript复制insert(数组)可以同时添加一条或多条,返回值是布尔类型。
insertGetId(一维数组),只能添加一条数据,返回自增的id。
语法:DB::table(‘表名’) -> insert(); 连贯操作/链式操作 案例:分别使用两个函数往数据表中插入几条记录
3、修改数据( update)
数据修改可以使用update()、increment()和decrement()方法来实现。 ①Update方法表示可以修改整个记录中的全部字段; ②Increment和decrement表示修改数字字段的数值(递增或者递减),典型的应用:记录登录次数、积分的增加;
案例:把id=1的名称,改名为‘张三丰’
代码语言:javascript复制->where()->update([ ])
注意:where方法之后可以继续调用where之类的方法。 -> where() -> where() -> where()… 这个语法是并且(and)关系语法。 -> where() -> orWhere() -> orWhere()… 这个语法是或者(or)关系语法。 Orwhere方法的参数与where一致。 Where参数顺序: -> where(字段名,运算符,字段值)。例如id=1,则可以写成:where(‘id’,’=’,1),简写成 Where(‘id’,1);【只有=号可以简写。】
返回值,表示受到影响的行数:
案例:把id=1的用户年龄字段值加10;【了解】 DB::table(’ member’)->increment(‘age’); 每次 1 DB::table(’ member’)->increment(‘age’, 5); 每次 5 DB::table(’ member’)->decrement(‘age’); 每次-1 DB::table(’ member’)->decrement(‘age’, 5); 每次-5
4、查询数据(get)
(1)取出基本数据 案例1:获取member表中所有的数据 DB::table(‘member’)->get(); //相当于select * from member; 返回值是一个集合对象,
返回值:
完成遍历取出的数据:
注意:Get查询的结果每一行的记录是对象的形式,不是数组。
案例2:获取id<3的数据 ->where()->get();
案例3:查询id>2且年龄<21
(2)取出单行数据
代码语言:javascript复制DB::table('member')->where('id','1')->first();//返回值是一个对象
等价于limit 1
(3)获取某个具体的值(一个字段)
代码语言:javascript复制DB::table('member')->where('id','1')->value('name');
(4)获取某些字段数据(多个字段)
代码语言:javascript复制$users = DB::table('member')->select('name', 'email')->get();
$users = DB::table('member')->select('name as user_name')->get();
(5)排序操作
代码语言:javascript复制DB::table('member')->orderBy('age','desc')->get();
(6)分页操作
代码语言:javascript复制DB::table('member')->limit(3)->offset(2)->get();
Limit:表示限制输出的条数
Offset:从什么地方开始
组合起来等价于limit 5,5
5、删除数据(delete)【了解】
在删除中,有两种方式:物理删除(本质就是删除)、逻辑删除(本质是修改)
数据删除可以通过delete函数和truncate函数实现,
代码语言:javascript复制delete表示删除记录;
truncate表示清空整个数据表;
DB::table(‘table_name’)->where(‘id’,‘1’)->delete();
例如:删除id小于3的记录
【补充:truncate】 语法:DB::table(‘member’) -> truncate();
6、执行原生的SQL语句(补充了解)
(1)执行原生查询语句 DB::select(“selec语句”);
(2)执行原生插入语句 DB::insert(“insert语句”);
(3)执行原生修改语句 DB::update(“update语句”);
(4)执行原生删除语句 DB::delete(“delete语句”);
(5)执行一个通用语句 DB::statement(“语句”);