db类操作数据库
增删改查+循环+判断
按照MVC的架构.对数据的澡作应该放在Model中完成.但如果不使用Model,我们也可以用laravel框架提供的DB类操作数据库·而且,对于某些极其复杂的sql,用Model已经很难完成.遥绷趁逮直查结获迈胡·使用旦DO类去执行原生纽·经rave!中DO类的基本用法DB::table['tablename']获取操作tablename表的实例.
数据表的创建与配置
创建数据库的方式
1.sql语句
2.图形界面
###建立数据表和测试表:
配置连接:
1…env文件配置mysql信息,
2.在config文件夹下database文件中进行配置,使用env函数,表示先从env文件中获取,如果获取成功就使用,如果失败就使用env函数的第二个参数,在做项目时建议关闭strict,utf8mb4超集
注意:如果是PHP artisan server启动的,修改了配置文件必须重新启用
在Test控制器引入db门面
use DB(DB门面已经在app.php文件中已经定义好了别名)
定义增删改查需要的路由
增加:/home/add
删除:/home/del
修改:/home/update
查询:/home/select
增加信息(insert)
对数据库添加操作者注意有两个函数可以实现,分别是insert和insertGetld()
insert(数组)可以同时添加一条或多条,返回值是布尔类型
insertGetld(一维数组),只能添加一条数据,返回自增的id
注意:DB::table(‘前缀的表名’)->insert();连贯操作或者叫链式操作
实例:向member添加多条数据
路由设置:
Route::group(['prefix'=>'home'],function (){ Route::get('add','Home\TestController@add'); Route::get('del','Home\TestController@del'); Route::get('update','Home\TestController@update'); Route::get('select','Home\TestController@select'); });
控制器函数设置(增加):
public function add(){ //定义关联操作的数据表 $db=DB::table('member'); //使用insert增加记录 $rst=db->insert([ [ 'name'=>'张三', 'age'=>'18', 'email'=>'zhangsan@qq.com' ], [ 'name'=>'李四', 'age'=>'19', 'email'=>'李四@qq.com' ] ]); dd($rst); }
使用insertGetId函数,添加一条记录,返回插入数据的id
rst=db->insertGetId([ 'name'=>'马冬梅', 'age'=>'18', 'email'=>'madong@qq.cm' ]); dd($rst);
修改信息(update)
数据修改可以使用update()、increment()、decrement()函数来实现
Update()表示可以修改整个记录中的全部字段;
increment和decrement表示修改数组字段的数值(递增或者递减,有局限性),典型应用(登录次数的递增、积分的增加);
补充:
在laravel中如果想友好的打印内容,可以使用dd方法
语法:dd(打印内容);[dump+die]
案例演示:把id=1的名称更改为"张三丰"
语法:
where->update([])返回值为收到影响的行数
where语法:
->where(字段,运算符,值)如果运算符为=号,中间运算符可以省略。
实现代码:
public function update(){ db=DB::table('member'); //修改id=1的用户名字更改为张三丰 $rst=$db->where('id','=','2')->update([ 'name'=>'张三丰' ]); dd($rst);//返回值为影响的行数 }
案例:用户年龄自增
DB::table[‘member’]->increment(‘votes’);自增1
DB::table[‘member’]->increment(‘votes’,5);自增5
DB::table[‘member’]->decrement(‘votes’);减1
DB::table[‘member’]->decrement(‘votes’,5);减5
查询数据(get):
取出多条数据
注意:1.查询出来的数据是一个对象
2.注意where方法之后继续调用where方法
->where()->where->where()… 这个语法是并且(and)关系语法
->where()->orwhere()->orwhere()… 这个语法是或者关系语法
orwhere()和where()一致
案例1:获取数据表中的所有数据
DB::table[‘member’]->get();返回值是一个结果集 Collection
db=DB::table('member'); $data=$db->get(); dd($data);
它是使用对象的方式来输出,而并非是数组,输出变量,必须使用对象的方式来输出:
foreach (data as $key =>$value){ echo "id是:{$value->id}.名字是:{$value->name}.邮箱是:{$value->email}<br/>"; }
案例2:查询id>3的数据
$data=$db->where('id','>','3')->get();
案例3:查询id>3,并且age<21,使用orwhere相同的部分会重合
$data=$db->where('id','>','2')->where('age','<','21')->get();
取出单条数据
DB::table(‘member’)->where(‘id’,‘1’)->first();//返回值是一个对象
等价于limit 1
案例:取出id=2的一条数据
$data=$db->where('id','2')->first(); echo "id是:{$data->id}.名字是:{$data->name}.邮箱是:{$data->email}<br/>";
###获取某个具体的值
DB::table(‘member’)->where(‘id’,‘1’)->value(‘name’);
案例:id为2的name的值
$data=$db->where('id','2')->value('name'); echo "名字是:{$data}<br/>";
获取某些字段数据(多个字段)
DB::table(‘member’)->select(‘name’,'email)->get();
DB::table(‘member’)->select(‘name as user_name’,'email)->get();//取别名
案例:查询一些指定字段的值
$data=DB::table('member')->select('name','email')->get(); dd($data);
排序操作:
DB::table(‘member’)->orderBy(‘age’,‘desc’)->get();//升序Asc 降序Desc
案例:按照指定的字段进行特定规则排序
data=DB::table('member')->orderBy('age','desc')->get(); dd($data);
分页排序
$data=DB::table(‘member’)->limit(3)->offset(2)->get();
limit表示限制输出的条数
offset:从什么地方开始
组合起来就等于limit5,5(从第六条开始走5条)
案例:分页操作
data=DB::table('member')->limit(1)->offset(2)->get(); dd($data);
删除操作(delete)[了解]
在删除中有两种删除:物理删除(本质是删除)和逻辑删除(本质是修改,重点)
数据删除可以通过delete函数和truncate函数实现。
Delect表示删除记录
Truncate表示清空整个数据表
DB::table(‘member’)->where(‘id’,‘1’)->delete();//返回受影响的行数
案例:删除id=1的数据
data=DB::table('member')->where('id','1')->delete(); dd($data);
执行任意的sql语句(了解)
执行任意的insert update delete语句(影响记录的语句使用statement语法)
DB::statement(“insert into member value(null,’’)”);
执行任意的select语句(不影响记录的语句使用select语法)
DB::select(“select * from member”);