1、数据库表的创建与配置
按照MVC的架构,对数据的操作应该放在Model中完成,但如果不使用Model,我们也可以用laravel 框架提供的DB类操作数据库。而且,对于某些极其复杂的sql,用Model
已经很难完成,需要开发者自己手写sql语句,使用DB类去执行原生sql。laravel 中DB类的基本用法DB::table('tableName')获取操作tableName表的实例。
(1)创建数据库和测试表
create table member(
id int primary key auto_increment,
name varchar(32) not null,
age tinyint unsigned not null,
email varchar(32) not null
)
(2)数据库在laravel框架中的配置
在.env文件里面
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=
也可以修改在config目录下面的database.php文件里面配置,使用env函数,表示先从.env文件里面获取,如果获取成功则使用,如果获取失败,则使用env函数的第二个参数。
学习环境建议关闭'strict'的严格模式
注意:如果是php artisan serve方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件;如果是wamp/lamp等环境则不需要重启。
(3)在控制器中引入DB门面;
use DB; #VSCode会报错,但是可以用
use Illuminate\Support\Facades\DB; #这里使用这个
(4)定义增删改查需要的路由
增加:/db/add
删除:/db/del
修改:/db/update
查询:/db/select
#DB路由
Route::group(['prefix' => 'db'], function () {
Route::get('add', [TestController::class, 'add']);
Route::get('del', [TestController::class, 'del']);
Route::get('update', [TestController::class, 'update']);
Route::get('select', [TestController::class, 'select']);
});
2、增加信息(insert)
对数据库中的某个表增加数据主要有两个函数可以实现,分别是insert()和insertGetld()
insert(数组)可以同时添加一条或多条,返回值是布尔类型。
insertGetld(一维数组),只能添加一条数据,返回自增的id。
注意: DB:table('无前缀的表名")
向member表同时添加多条数据
// 定义需要操作的数据表
$db = DB::table('member');
// 使用insert增加记录 连贯操作/链式操作
$result = $db->insert([ #插入一条或多条
[
'name' => '马东梅',
'age' => '18',
'email' => 'mdm@qq.com'
],
[
'name' => '马东',
'age' => '19',
'email' => 'md@qq.com',
]
]);
$result = $db->insertGetId( #insertGetId()方法 返回:3
[
'name' => '赫文婷',
'age' => '18',
'email' => 'hwt@qq.com'
]
);
3、修改数据(update)
数据修改可以使用update()、increment()和 decrement()函数来实现。
Update表示可以修改整个记录中的全部字段;
Increment和decrement表示修改数字字段的数值(递增或者递减);典型应用:记录登陆次数;
案例:把id=1的名称改名为“张三疯”
->where(字段,运算符,值)->update([]) 如果运算符为"=",则第二个参数可以不写
返回的结果是受到影响的行数
// 修改id为1的用户名称为张三疯
$result = $db->where('id', '=', '1')->update([
// 需要修改字段的k:v
'name' => '张三疯',
]);
案例:把id=1的用户年龄字段加5;
$result = $db->where('id', '=', '1')->increment('age', 5);
DB::table('users')->increment('votes'); #每次+1
DB::table('users')->increment('votes', 5); #每次+5
DB::table('users')->decrement('votes'); #每次-1
DB::table('users')->decrement('votes', 5); #每次-5
案例:清空整个表DB::table('users')->truncate();
4、查询数据(get)
(1)取出基本数据
案例1:获取member表中所有的数据
DB::table('member')->get(); 相当于select * from member
返回值是一个集合对象。
案例2:获取id<3的数据
-> where('id' , '<' , '3') -> get()
注意: where方法之后继续调用where方法。
-> where() -> where() -> where()... 这个语法是并且(and) 关系语法。
-> where() -> orWhere() -> orWhere()... 这个语法是或者(or)关系语法。
案例3:查询id>2且年龄<21
->where('id', '>', '2')->where('age', '<', '21')->get();
(2)取出单行数据
->where('id', '<=', '2')->first(); #返回值是一个对象
等价于limit 1
(3)获取某个具体的值(一个字段,返回单个值)
DB::table('member')->where('id', '<=', '2')->value('email'); #返回值是一个对象
(4)获取某些字段数据(多个字段,返回数组)
DB::table('member')->where('id', '<=', '2')->select('name', 'email')->get();
(5)排序操作
DB::table('member')->orderBy('id', 'desc')->get();
(6)分页操作
DB::table('member')->offset(0)->limit(3)->get();
等价 limit 0,3
5、删除数据(delete) 【了解】
在删除中,有两种方式:物理删除(本质就是删除)、逻辑删除(本质是修改)
Delete() 表示删除记录
Truncate() 表示清空整个数据表
返回的结果是受到影响的行数
例如:删除id小于3的记录
DB::table('member')->where('id', '<' , '3')->delete();
6、执行任意的SQL语句【了解】
(1) 执行任意的 insert update delete 语句【影响记录的语句使用statement语法】
DB::statement("insert into member values(null,"')");
(2)执行任意的select语句【不影响记录的语句使用select语法】
$res = DB::select("select * from member'");