Laravel操作数据库
DB
数据库基本操作
使用原生SQL
进行查询。
// 查询
$result=DB::select('select * from user where user_id=?',[$user_id]);
$result2=DB::select('select * from user where user_id=:id',['id'=>$user_id]);
// 插入,返回被更新的记录数
$affected=DB::insert('insert into users(id,name) values(?,?)',[$user_id,$user_name]);
// 删除,返回被删除的记录数
$deleted=DB::delete('delete from users');
// 运行一个通用语句
DB::statement("drop table user");
// 事务
DB::transaction(function(){
// 执行上面设置的操作
});
// 处理死锁
DB::transaction(function(){
// 这里还是一样,只是添加了第二个参数表示该表死锁时进行的最大尝试次数
},$maxTry);
// 数据库回滚
DB::rollBack();
查询构建器
获取所有行 get
$users=DB::table('user')->get();
// 可以像下面这样调用其中的字段值
foreach($users as $user){
echo $user->name;
echo $user->id;
}
获取一行 first
获取整行
$user=DB::table('user')->first();
echo $user->name;
获取一个字段 value
$user_names=DB::table('user')->value('user_name');
获取一列 pluck
$user_name=DB::table('user')->pluck('user_name');
设置返回列的数组索引
$user_name=DB::table('user')->pluck('user_name','user_id');
user_id
必须是表中的字段。
组块结果集 chunk
记录数太多时,可以将所有记录数拆分成多个区块,针对这些区块区块进行小型的处理。
DB::table('user')->chunk($Number,function($anyName){
// 这里的$anyName表示的是DB::table('user')->select()后获得的结果,可以像下面这样进行处理
foreach($anyName as $key=>$value){
// code...
}
// 如果想停止运行,那么就返回错误
return false;
});
聚合函数
- count
- max
- min
- avg
- sum
查询 select
指定返回字段
DB::table('user')->select('user_id','user_name')-get();
返回唯一结果 distinct
DB::table('user')->select('user_code')->distinct()->get();
使用SQL语句 raw
DB::table('user')->select(DB::raw("count(*) as number"))->get();
连接 join
这块我用的不多,暂且先放着。
联合 union
我退步了。。。。。。
限制条件 where
where
接受三个参数,这三个参数分别是列名、操作符,要比较的值。
$users=DB::table('user')->where("user_id","=","100")->first();
多条件查询
$users=DB::table('user')->where(array(
['user_id','=','100'],
['user_name','=','hello world']
))->get();
或 orwhere
$users=DB::table('user')
->where('user_id','=','100')
->orwhere('user_id','=','101')
->get();
whereBetween
$users=DB::table('user')
->whereBetween('user_id',[1,100])
->get();
whereNotBetween
whereIn
whereNotIn
whereNull
whereNotNull
whereDate
whereMonth
whereDay
whereYear
whereColumn
排序、分组、限定
排序 orderBy
// 第二个参数可以指定升序排序 asc 还是降序排列 desc
$users=DB::table('user')->orderBy('user_id','desc')->get();
按照日期进行排序 latest/oldest
注意,使用该内容时,该表内部一定要有 create_at 字段
对结果集进行随机排列 inRandomOrder
$randData=DB::table('user')
->inRandomOrder()
->get();
对结果集进行分组 having / havingRaw
$users=DB::table('user')
->groupBy('first_name')
->having('first_name','=','King')
->get();
skip / take 对应 offset / limit
条件查询 when
比较直观的说法可以是,在查询中可以根据外部条件确定查询条件:
DB::table('user')
->when(
$situation,
function($query){
// 当$situation为true时进行执行
},
function($query){
// 当$situation为false时进行执行
}
)
->get();
这样我们就可以在外部设置$situation
的值,通过控制$query
,来进行查询了。
插入数据 insert
DB::table('user')->insert(
['user_name'=>'trouble','emai'=>'trouble@i.am.in']
);
插入多组数据
DB::table('user')->insert(
['user_name'=>'trouble'],
['user_name'=>'i'],
['user_name'=>'am'],
['user_name'=>'in']
);
获取插入数据后的ID insertGetId
$id=DB::table('user')->insertGetId(
['user_name'=>'trouble i am in'],'user_id'
);
注意!如果不使用 insertGetId 的第二个参数指定表的主键名称的话,那么默认主键名称为 id
更新 update
DB::table('user')
->where('user_id',100)
->update(
['user_name'=>'trouble i am in']
);
删除 delete
DB::table('user')
->where('user_id',100)
->delete();
分页 paginate
$users=DB::table('user')->paginate(10);
简单分页 simplePaginate
相比于上面的paginate
,这里的简单分页仅仅提供上一页、下一页这样的作用。
$users=DB::table('user')->simplePaginate(10);
显示分页结果
要将分页的超链接显示在视图中,可以使用如下的形式:
假设控制器传递进来的参数格式如下:
$users=DB::table('user')->paginate(10);
return view('User.index',['users'=>$users]);
{{$users->links()}}
在链接中加入参数
{{$users->appends(['user_name'=>$user_name])->links()}}
视图渲染页面
是vendor/laravel/framework/src/Pagination/resource/views/default.blade.php
文件,修改该文件即可实现修改分页样式功能。