laravel基础知识之数据库操作
2018-03-20 23:35
288 查看
我们可以使用多种方式与数据库交互,包括原生sql,查询构造器,以及Eloquent ORm 1、使用 DB 门面进行数据库的增删改查 DB::insert('insert into users ( id , name , email , password ) values ( ?,?,?,?)',[1,'laravel','laravel@test.com','123']);//返回的是bool值 true or false DB::select('select * from users where id = ? ',[1]); DB::select('select * from users where id = :id ',[':id'=>1]);//返回的是对象数组 DB::update('update users set name = "laravelAcademy" where name = ?',['Academy'] );//返回受影响的行数 DB::delete('delete from users where name = ?',['张三']);//返回受影响的行数 DB::statement('drop table users');//删除用户表 2、监听查询事件 在AppServiceProvider的boot方法中定义监听器 function boot(){ DB::listen(function($sql,$bindings,$time){ echo 'sql 语句执行:' . $sql . ', 参数' . json_encode($bindings) . ', 耗时:' . $time . 'ms'; }); } 3、数据库事务 DB门面提供两种方式支持数据库事务 DB::transaction(function(){ DB::table('users')->update(['id'=>1]); DB::table('posts')->delete(); }); 另外一种是beginTransaction(),rollBack(),commit()三种方法一起使用,从而构建一个完整的事务操作 DB::beginTransaction(); if($somethingIsFailed){ DB::rollBack(); return false; } DB::commit(); 使用查询构造器对数据库进行增删改查,还是依赖DB门面 1、新增数据 a、insert方法接收一个数组,包含要插入的字段名和值 DB::table('users')->insert([ ’name‘ => '李四', ’email‘ => '1121323951@qq.com', 'password' => '123456', ]) //返回 boolean 值 true or false b、insert还接收一个嵌套数组,进行多条记录插入 DB::table('users')->insert([ ['id'=>1,'name'=>'Laravel','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'] ]); //返回的是boolean值 true or false c、使用insertGetId方法来插入记录并获取Id DB::table('users')->insertGetId(['id'=>1,'name'=>'Laravel','email'=>'laravel@test.com','password'=>'123']) 2、更新数据 update方法接收一个键值对数组,对记录进行更新,返回受影响的行数 DB::table('users')->where('name','Laravel-Academy')->update(['password'=>'123']); 递增递减
DB::table('users')->increment('votes'); DB::table('users')->increment('votes',5); DB::table('users')->decrement('vote'); DB::table('users')->decrement('vote',5); DB::table('users')->increment('votes',1,['name'=>'Jone']);
3、删除数据 DB::table('users')->delete(); DB::table('users')->where('id','=',54)->delete();//返回受影响的行数 4、基本查询 a.获取所有数据列 DB::table('users')->get(); DB::table('users')->where('name','=','jone')->get();//返回对象数组 b、从数据表中获取单个列或行 $user = DB::tale('users')->where('name','jone')->first();//返回单个对象 $email = $user->email; 或者 $email = DB::tale('users')->where('name','jone')->value('email'); c、分块显示数据 DB::table('users')->orderBy('id') ->chunk(10,function($users as $user){ //一些逻辑操作 });//在闭包中返回false,停止对后续切块的处理 d、获取一列的值 $titles = DB::table('roles')->pluck('title');//返回数组 $titles = DB::table('roles')->pluck('title',‘name’);//返回关联数组 e、原生表达式 DB::table('users')->select(DB::raw('name,email'))->where('id','<',3)->get(); f、聚合 count()、max()、min()、avg()、sum()等聚合方法 DB::table('users')->count(); DB::table('users')->max('age'); g、指定一个select语句 DB::table('users')->select('name','age')->get(); h、distinct方法允许你强制返回不重复的结果 DB::table('users')->distinct()->get(); 5、查询构造器高级查询 a、连接查询 常见的链接查询有内链接,左连接,右连接,交叉连接 a1.内链接 DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get(); a2、左连接 DB::table('users')->leftJoin('posts','users.id','=','posts.user_id') a3、crossJoin交叉连接,交叉连接在第一个表和连接之间生成笛卡儿积 DB::table('sizes')->crossJoin('colours')->get(); a4、高级join语句 DB::table('users') ->join('contacts',function($join){ $join->on('users.id','=','contacts.user_id')->orOn(...); }) ->get(); DB::table('users') ->join('contacts', function ($join) { $join->on('users.id', '=', 'contacts.user_id') ->where('contacts.user_id', '>', 5); }) ->get(); b、联合查询 $users = DB::table('users')->where('id','<',3); $users = DB::table('users')->where('id','>',2)->union($users)->get(); UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同, 另一个Select语句的结果集列名将被忽略,且其他查询字段数必须和第一个相同 c、where子句 1、DB::table('users')->where('列名','操作符',‘比较值’)->get(); 2、也可以传递条件数组 DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get(); 3、or语句 DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get(); 4、whereBetween方法用来验证字段的值介于两个值之间 DB::table('users') ->whereBetween('votes', [1, 100])->get(); 5、whereOrBetween方法验证字段的之不在两值之间 DB::table('users') ->whereNotBetween('votes', [1, 100]) ->get(); 6、whereIn,whereNotIn方法验证指定字段值在不在数组内 DB::table('users') ->whereIn('id', [1, 2, 3]) ->get(); DB::table('users') ->whereNotIn('id', [1, 2, 3]) ->get(); 7、whereNull,whereNotNull方法验证字段的值是不是null DB::table('users') ->whereNull('updated_at') ->get(); DB::table('users') ->whereNotNull('updated_at') ->get(); 8、whereDate/whereMonth/whereDay/whereYear/whereTime 方法用于比较字段的值和日期 $users = DB::table('users') ->whereTime('created_at', '=', '11:20') ->get(); 9、whereColumn方法用于验证两个字段比较 DB::table('users') ->whereColumn('first_name', 'last_name') ->get(); DB::table('users') ->whereColumn('updated_at', '>', 'created_at') ->get(); DB::table('users') ->whereColumn([ ['first_name', '=', 'last_name'], ['updated_at', '>', 'created_at'] ])->get(); 6、排序 orderBy 针对指定字段将查找结果进行排序,第一个参数是排序字段,第二个参数是排序顺序asc或desc DB::table('users') ->orderBy('name', 'desc') ->get(); latest 和 oldest 方法允许你轻松地按日期对查询结果排序 DB::table('users') ->latest() ->first(); 7、groupBy/having方法用来对查询结果进行分组 DB::table('users') ->groupBy('first_name', 'status') //对多个字段进行分组 ->having('account_id', '>', 100) ->get(); 8、查询构造器重使用skip和take对查询结果进行分页,相当于limit语句 $users = DB::table('users') ->skip(10) ->take(5) ->get(); 或者使用limit和offset方法 DB::table('users') ->offset(10) ->limit(5) ->get();
相关文章推荐
- Laravel 数据库操作基础知识总结
- C++数据库操作学习笔记:ADO基础知识
- 数据库外键基础知识和操作(世界杯版)
- Laravel基础(六)--使用Eloquent ORM操作数据库之删除记录
- [李景山php]每天laravel[017]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---准备数据库
- Java数据库连接——JDBC基础知识(操作数据库:增删改查)
- Java数据库连接——JDBC基础知识(操作数据库:增删改查)【转】
- 【PHP基础知识】——数据库MySQL操作(下)
- Java数据库连接——JDBC基础知识(操作数据库:增删改查)
- 数据库开发基本操作-数据库基础知识
- Laravel基础(四)--使用Eloquent ORM操作数据库之新增记录
- mysql基础知识之-数据库的创建、查看等常用操作
- 数据库开发基本操作-SQL Server数据库基础知识
- Mysql基础知识:操作数据库
- Orcale数据库基础知识总结之orcale数据库的DDL和DML操作
- 【PHP基础知识】——数据库MySQL操作(上)
- Postgresql 基础知识-1 数据库基础操作
- 3.22数据库基础知识:①数据类型②基本规则③数据库基本操作,增删改库,表
- laravel操作数据库报错--基础
- Java数据库连接——JDBC基础知识(操作数据库:增删改查)