获取查询构建器很简单,还是要依赖DB门面,我们使用DB门面的table
方法,传入表名,即可获取该表的查询构建器:
1 |
$users = DB::table('users'); |
这样我们就获取到了$users
表的查询构建器,实际上,底层返回的是Illuminate\Database\Query\Builder
的实例,我们对查询构建器的所有操作都是调用该实例对应类上的方法。下面我们就列举查询构建器的一些常用方法,我们还是沿用上一节创建的$users
表做演示说明 。
使用查询构建器的insert
方法即可插入一条/多条数据:
1 2 3 4 5 |
DB::table('users')->insert([ ['id'=>1,'name'=>'<a title="View all posts in Laravel" href="http://laravelacademy.org/tags/laravel" target="_blank">Laravel</a>','email'=>'laravel@test.com','password'=>'123'], ['id'=>2,'name'=>'Academy','email'=>'academy@test.com','password'=>'123'], ['id'=>3,'name'=>'LaravelAcademy','email'=>'laravel-academy@test.com','password'=>'123'] ]); |
执行成功后即可在数据表$users
中插入三条记录。有时候,我们需要插入记录后获取自增ID,可以使用insertGetId
方法:
1 2 3 |
$insertId = DB::table('users')->insertGetId( ['name'=>'Laravel-Academy','email'=>'laravelacademy@test.com','password'=>'456'] ); |
更新表记录很简单,使用查询构建器的update
方法即可:
1 |
$affected = DB::table('users')->where('name','Laravel-Academy')->update(['password'=>'123']); |
该方法返回受影响的函数。
使用delete
方法删除表记录,删除方法和更新方法类似,返回被删除的行数:
1 |
$deleted = DB::table('users')->where('id', '>', 3)->delete(); |
如果我们是要删除整个数据表数据,则略去where条件,如果是要清空数据表还要将自增ID置为0,可以使用truncate
方法:
1 |
DB::table('users')->truncate(); |
使用get方法即可获取一张表的所有记录:
1 2 |
$users = DB::table('users')->get(); dd($users); |
打印结果如下:
如果是获取指定列的数据,则需要加上select
条件:
1 2 |
$users = DB::table('users')->select('name','email')->get(); dd($users); |
打印结果如下:
获取单条记录需要在查询基础上加上first
方法:
1 2 |
$user = DB::table('users')->where('name','Laravel')->first(); dd($user); |
则对应结果为:
如果数据库包含多条数据,则一次性获取会极大影响性能,对应地,我们可以调用chunk
方法分组块获取数据:
1 2 3 4 5 6 7 |
DB::table('users')->chunk(2,function($users){ foreach($users as $user){ // if($user->name=='LaravelAcademy') // return false; echo $user->name.'<br>'; } }); |
这里我们指定每次取两条记录。注释部分的意思是我们可以设定查询退出条件,当达到该条件时,查询退出,不再往下执行。
上述方法获取的查询结果都是对象实例/对象实例数组,有时候,我们只是想简单获取单列的值,遍历数组获取指定列的值太麻烦,可以使用lists
方法获取列值数组:
1 2 |
$users = DB::table('users')->lists('name'); dd($users); |
对应的输出为:
这样我们就可以免去遍历对象数组的麻烦。
此外,查询构建器还支持原生表达式,我们需要调用DB门面的raw
方法来实现:
1 2 |
$users = DB::table('users')->select(DB::raw('name,email'))->where('id','<',3)->get(); dd($users); |
对应输出为: