laravel数据库常用操作
使用 DB facade 实现 CURD:
也叫做原始查表。就是用最原始的 SQL 语句操作数据库
# 之前创建了一张 student 表,所以创建一个 student 的控制器 # 新建 App/Http/Controllers/StudentController.php <?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; // 加载的类库 class StudentController extends Controller{ public function test1(){ // return 'test1'; // 查询 $sutdent = DB::select('SELECT * FROM student WHERE id > ?', [1000]); dd($sutdent); // 新增 $bool = DB::insert('INSERT INTO student(name, age) VALUES (?, ?)', ['Tom', 30]); var_dump($bool); // 返回更新是否成功: bool(true) // 修改 $rowNum = DB::update('UPDATE student SET age = ? WHERE name = ?', [20, 'Tom']); var_dump($rowNum); // 返回更新的行数: int(1) // 删除 $rowNum = DB::delete('delete FROM student WHERE id > ?', [1001]); var_dump($rowNum); // 返回删除的行数: int(1) } } # routes/web.php 新建一条路由 Route::any('test1', ['uses' => 'StudentController@test1']);
查询构造器:
查询构造器是使用 Laravel 操作数据库的必备技能,ORM 操作数据库也需要用到查询构造器
Laravel 查询构造器(query builder)提供方便、流畅的接口,用来建立以及执行数据库查找语法
使用 PDO 参数绑定,以保护应用程序免于 SQL 注入,因此传入的参数不需额外转义特殊字符
基本可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行
新增数据
<?php # 在 App/Http/Controllers/StudentController.php 新增一个方法 public function query1(){ // 插入一条数据并返回 id: $id = DB::table('student')->insertGetId([ 'name' => 'Ketty', 'age' => 16 ]); var_dump($id); // 返回插入的条的 id:int(1007) // 一次插入多条数据: $bool = DB::table('student')->insert([ ['name' => 'name1', 'age' => 12], ['name' => 'name2', 'age' => 13] ]); var_dump($bool); // 返回更新是否成功: bool(true) } # routes/web.php 新建一条路由 Route::any('query1', ['uses' => 'StudentController@query1']);
修改数据:
更新为指定内容
自增和自减
<?php # 在 App/Http/Controllers/StudentController.php 新增一个方法 public function query2(){ // 修改返回影响的行数 $rowNum = DB::table('student')->where('id', 1001)->update(['age' => 30]); var_dump($rowNum); // 返回更新的行数: int(1) // 自增(increment)、自减(decrement) // 自增 3 $rowNum = DB::table('student')->where('id', 1001)->increment('age', 3); var_dump($rowNum); // 返回更新的行数: int(1) // 自增(减)的时候修改其它 n 个字段 $rowNum = DB::table('student') ->where('id', 1001) ->increment('age', 3, [ 'name' => 'Tom2', 'gender' => 20 ]); var_dump($rowNum); // 返回更新的行数 } # routes/web.php 新建一条路由 Route::any('query2', ['uses' => 'StudentController@query2']);
删除数据:
# 在 App/Http/Controllers/StudentController.php 新增一个方法 public function query3(){ // delete $rowNum = DB::table('student')->where('id', '<=', 1001)->delete(); var_dump($rowNum); // 返回更新的行数: int(1) } # routes/web.php 新建一条路由 Route::any('query3', ['uses' => 'StudentController@query3']);
查询数据:
查询方法:
get()
、first()
、where()
、pluck()
、lists()
、select()
、chunk()
# 在 App/Http/Controllers/StudentController.php 新增一个方法 public function query4(){ // 获取所有表数据 get() $student = DB::table('student')->get(); dd($student); // 获取一条数据 first() $student = DB::table('student')->orderBy('id', 'desc')->first(); dd($student); // 条件查询 where() $student = DB::table('student')->where('id', '>=', '1001')->get(); dd($student); // 多条件查询 whereRaw() $student = DB::table('student')->whereRaw('id >= ? and age > ?', [1001, 18])->get(); dd($student); // 返回结果集中指定的字段 pluck() // 5.4 以后 pluck() 取代了 lists() $student = DB::table('student')->pluck('name','id'); //id 作为下标,也可以不传 dd($student); // 指定多个字段查找 select() $student = DB::table('student')->select('id', 'name', 'age')->get(); dd($student); // 分批查询 chunk() // 每次查 2 条 DB::table('student')->orderBy('id', 'desc')->chunk(2, function($students) { var_dump($students); }); } # routes/web.php 新建一条路由 Route::any('query4', ['uses' => 'StudentController@query4']);
查询构造器中的聚合函数:
聚合函数:count()
、max()
、min()
、avg()
、sum()
# 在 App/Http/Controllers/StudentController.php 新增一个方法 public function query5(){ // 返回记录的总数 $num = DB::table("student")->count(); var_dump($num); // 返回 int(6) // 返回最大值 $max = DB::table("student")->max('age'); var_dump($max); // 返回 string(2) "51" // 返回最小值 $min = DB::table("student")->max('age'); var_dump($min); // 返回 string(2) "18" // 返回平均数 $avg = DB::table("student")->avg('age'); var_dump($avg); // 返回和 $sum = DB::table("student")->sum('age'); var_dump($sum); } # routes/web.php 新建一条路由 Route::any('query5', ['uses' => 'StudentController@query5']);
Eloquent ORM:
ORM 是使用 Laraval 操作数据库最常用、最方便的方式
Laravel 所自带的 Eloquent ORM 是一个优美、简洁的 ActiveRecord 实现、用来实现数据库操作
每个数据表都有一个与之相对应的“模型”(Model)用于和数据表交互
模型的建立
namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model{ // 默认情况下,表名对应的是模型名称的复数(模型 student 对应表名 students) // 但是我们没有 students 表,所以我们要指定表 // 指定表名 protected $table = 'student'; // 指定主键 protected $primaryKey = 'id'; } # routes/web.php 新建一条路由 Route::any('orm1', ['uses' => 'StudentController@orm1']); # 在 App/Http/Controllers/StudentController.php 新增引用 use App\Student; # 再新增一个方法 public function orm1(){ // 查询表的所有记录 all() $students = Student::all()->toArray(); var_dump($students); // 返回一个集合 // 根据主键进行查询 find() $students = Student::find(1001)->toArray(); var_dump($students); // 根据主键查找,没查到抛出异常findOrFail() $students = Student::findOrFail(1001)->toArray(); var_dump($students); 查询构造器在 orm 中的使用 // 查询表的所有记录 get() $students = Student::get()->toArray(); var_dump($students); // 查询一条记录 $students = Student::where('id', '>', 1001)->orderBy('age', 'desc')->first()->toArray(); var_dump($students); // 分批查询 chunk() Student::chunk(2, function($students){ var_dump($students); }); // 聚合函数 $num = Student::whereRaw('id >= ? and age > ?', [1001, 18])->count(); var_dump($num); }
新增数据、自定义时间戳及批量赋值的使用:
通过模型新增数据(涉及到自定义时间戳)
使用模型的 create() 方法新增数据(涉及到批量赋值)
# routes/web.php 新建一条路由 Route::any('orm2', ['uses' => 'StudentController@orm2']); # 在 App/Http/Controllers/StudentController.php 再新增一个方法 public function orm2(){ // 使用模型新增数据 save() // 执行 save() 方法时,默认会自动维护数据表的 created_at 和 updated_at字段 // 所以这两字段就不需要手动进行管理,当然也可以关闭 // 修改模型文件 App/Student.php // model 文件添加属性:public $timestamps = false; // 但是这个功能提好用的,还是打开比较好,可以指定 unix 时间戳 // // 自动维护时间戳 // public $timestamps = true; // // 添加返回时间戳方法 // public function getDateFormat(){ // return time(); // } $student = new Student(); $student->name = 'Berry'; $student->age = 22; $bool = $student->save(); var_dump($bool); // 返回一个布尔值 // 查找 $student = Student::find(1013); echo $student->created_at; // 虽然插入的时间戳,但是返回的是格式化好的数据: 2019-08-01 05:57:09 // 如果不想格式化,修改模型文件 App/Student.php // 再写一个方法 // protected function asDateTime($val){ // return $val; // } // 使用模型的 create() 方法 // 涉及到批量赋值 // 修改模型文件 App/Student.php // //指定允许批量赋值的字段 //protected $fillable = ['name', 'age']; // 如果不想允许批量赋值 // protected $guarded = ['xx']; $student = Student::create([ 'name' => 'Miranda', 'age' => 18 ]); var_dump($student); // 返回添加成功的数据的对象 // 以属性查找,若没有,新增并取得新的实例:firstOrCreate() $student = Student::firstOrCreate(['name' => 'Mosh']); var_dump($student); // 以属性查找,若没有则建立新的实例,如果要保存,调用 save():firstOrNew() $student = Student::firstOrNew(['name' => 'Mosh']); $bool = $student->save(); var_dump($bool); }
修改数据:
通过模型更新
结合查询语句批量更新
# routes/web.php 新建一条路由 Route::any('orm3', ['uses' => 'StudentController@orm3']); # 在 App/Http/Controllers/StudentController.php 再新增一个方法 public function orm3(){ // 通过模型更新数据 $student = $student::find(1016); // 返回对象 $student->name = 'Mossssh'; $bool = $student->save(); var_dump($bool); // 修改 name 字段,维护 updated_at 时间戳,返回 bool // 结合查询语句批量更新 $rowNum = Student::where('id','>','1014')->update([ 'age' => 41 ]); var_dump($rowNum); }
删除数据:
通过模型删除
通过主键值删除
根据指定条件删除
# routes/web.php 新建一条路由 Route::any('orm4', ['uses' => 'StudentController@orm4']); # 在 App/Http/Controllers/StudentController.php 再新增一个方法 public function orm4(){ // 通过模型删除 $student = Student::find(1017); $bool = $student->delete(); var_dump($bool); // 通过主键值删除 $num = Student::destroy([1013, 1016]); var_dump($num); // 根据指定条件删除 $num = Student::where('id', '>', '1012')->delete(); var_dump($num); }
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. PHP相关 > laravel数据库常用操作