国庆这几天都在外面浪,马上要上班了,该收心了,趁今天有些空闲的时间,静下心总结下Laravel操作数据库的三种方式,以作资料和参考:(三种方式:DB façade 、 查询构造器、 Eloquent ORM )
目录
一、使用DB façade(原始查找)操作数据库
二、使用查询构造器操作数据库(核心)(重要)
三、Eloquent ORM操作数据库
详细目录结构:
一、使用DB façade(原始查找)操作数据库
(1)基本的数据库操作路由配置
(2)数据库façade操作模型StudentController建立
二、使用查询构造器操作数据库(核心)(重要)
(1)新增数据
2-1-1. 新增数据返回布尔值
2-1-2. 新增数据返回ID
2-1-3. 新增多条数据
(2)修改数据
2-2-1. *常用修改数据方式
2-2-2. 自增自减修改数据方式
(3)修改数据
(4)查询数据(first()、where()、pluck()、select()、chunk())
(5)内置的聚合函数
三、Eloquent ORM操作数据库
(1)Eloquent ORM模型的建立及查询数据
(2)Eloquent ORM中新增数据、自定义时间戳、批量赋值
(3)Eloquent ORM修改数据
(4)Eloquent ORM 删除数据
(1)基本的数据库操作路由配置:
//新增数据
Route::get('student/add/{name?}/{age?}',['uses' => 'StudentController@addStudentInfo'])->where(['name' => '^[\x{4e00}-\x{9fa5}_a-zA-Z0-9]+$','age' => '\d+']);
//修改数据
Route::get('student/update/{id?}/{name?}',['uses' => 'StudentController@updateStudentInfo'])->where(['id' => '\d+','name' => '^[\x{4e00}-\x{9fa5}_a-zA-Z0-9]+$']);
//删除数据
Route::get('student/delete/{id}',['uses' => 'StudentController@deleteStudentInfo'])->where(['id'=>'\d+']);
//查询数据
Route::get('student/find',['uses' => 'StudentController@findStudentInfo']);
(2)数据库façade操作模型StudentController建立(app\Http\Controllers\StudentController.php)
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
/**
* [新增数据]
* @param string $name [新增姓名]
* @param integer $age [新增年龄]
* @return [Boolean] [新增情况]
*/
public function addStudentInfo($name = '我的女神',$age = 16){
$insertBoolean = DB::insert('insert into student(name, age) values(?, ?)',[$name,$age]);
return var_dump($insertBoolean); //bool(true)
}
/**
* [修改数据]
* @param integer $id [要修改的ID]
* @param string $name [要修改成的姓名]
* @return [int] [修改的行数]
*/
public function updateStudentInfo($id = 1002,$name = '放牛娃的春天'){
$updateRows = DB::update('update student set name = ? where id = ?',[$name,$id]);
return var_dump($updateRows); //int(1)
}
/**
* [删除数据]
* @param [type] $id [要删除行的ID]
* @return [int] [删除的行数]
*/
public function deleteStudentInfo($id){
$deleteRows = DB::delete('delete from student where id = ?',[$id]);
return $deleteRows; //int(1)
}
/**
* [查询数据]
* @return [array] [查询数据的数组集合]
*/
public function findStudentInfo(){
$doc = DB::select('select * from student');
return dd($doc); //调试模式dd()
}
}
简介:Laravel查询构造器(query builder)提供方便、流畅的接口,用来建立及执行数据库查找语法;其使用PDO参数绑定,以保护应用程序免于SQL注入因此传入的参数不需额外转义特殊字符(详细了解PDO参数绑定,请参考:https://www.jianshu.com/p/f432fee5d901 )
(1)新增数据
1-1.新增数据返回布尔值
/**
* [使用查询构造器新增数据]
* @param string $name [新增的姓名]
* @param integer $age [新增的年龄]
* @return [boolean] [新增是否成功]
*/
public function queryAdd($name = '王小二的女朋友',$age = 23){
$addBool = DB::table('student')->insertGetId([
'name' => $name,
'age' => $age
]);
return var_dump($addBool); //int(1009)
}
1-2.新增数据返回ID
/**
* [使用查询构造器新增数据]
* @param string $name [新增的姓名]
* @param integer $age [新增的年龄]
* @return [int] [新增的ID]
*/
public function queryAdd($name = '王小二的女朋友',$age = 23){
$addId = DB::table('student')->insertGetId([
'name' => $name,
'age' => $age
]);
return var_dump($addId); //int(1009)
}
1-3.新增多条数据
/**
* [使用查询构造器新增多条数据]
* @return [boolean] [新增是否成功]
*/
public function queryAddMore(){
$addBool = DB::table('student')->insert([
['name' => '赵云', 'age' => 32],
['name' => '张飞', 'age' => 35],
['name' => '周瑜', 'age' => 28],
['name' => '黄盖', 'age' => 36]
]);
return var_dump($addBool); // bool(true)
}
(2)修改数据
2-1. *常用修改数据方式:
/**
* [使用查询构造器更新数据]
* @param integer $id [要更新的ID]
* @param string $name [要更新的姓名]
* @return [int] [更新的行数]
*/
public function queryUpdate($id = 1007,$name = '放牧的星星'){
$updateRows = DB::table('student')->where('id', $id)->update(['name' => $name]);
return var_dump($updateRows); //int(1)
}
2-2. 自增自减修改数据方式:
(3)删除数据
/**
* [使用查询构造器删除数据]
* @param [int] $id [要删除项的ID]
* @return [int] [删除的行数]
*/
public function queryDelete($id){
$deleteRows = DB::table('student')->where(['id' => $id])->delete();
// 删除总表 ( 不建议使用 )
// DB::table('student')->truncate();
return var_dump($deleteRows); // int(1)
}
(4)查询数据( get()、 first() 、 where() 、 pluck() 、 lists()[新版本已弃用] 、 select() 、 chunk() )
/**
* [查询构造器查询数据]
*/
public function queryFind(){
//1. first方法使用,查找制定顺序的第一个(默认升序asc)
/*$doc = DB::table('student')->orderBy('id','asc')->first();
print_r($doc); 打印:stdClass Object ( [id] => 1003 [name] => 大黄蜂 [age] => 18 [sex] => 10 [created_at] => 0 [updated_at] => 0 )*/
//2. where使用 ( 查询ID小于1005的所有数据 )
/*2-1. $doc = DB::table('student')->where('id','<',1005)->get();
2-2. $doc = DB::table('student')->whereRaw('id > ? and age < ?',[1001,20])->get();*/
//3. pluck方法使用 ( 返回对应字段的列的数组 )
/* $doc = DB::table('student')->where('age','>=',30)->pluck('name','id');
print_r($doc); //打印: Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => 赵云 [1] => 张飞 [2] => 黄盖 ) )*/
//4. lists方法的使用 ( 返回对应字段的key-value数组,类似于上面的pluck方法 ) [注意新版本Laravel已经弃用该lists方法]
// $doc = DB::table('student')->where('age','>=',30)->lists('name','id');
//5. select方法的使用 (返回对应字段的数据列表)
/*$doc = DB::table('student')->where('id','<=','1004')->select('name','age','id')->get();
print_r($doc); //打印: Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => stdClass Object ( [name] => 大黄蜂 [age] => 18 [id] => 1003 ) [1] => stdClass Object ( [name] => 我的女神 [age] => 16 [id] => 1004 ) ) )*/
// 6. chunk方法的使用 ( 分段查询 )
/*DB::table('student')->orderBy('id','desc')->chunk(2,function($result){
dd($result);
});*/
//dd($doc);
//return var_dump($doc);
}
(5)内置的聚合函数
常用:count()、max()、min()、avg()、sum()
/**
* [查询构造器聚合函数]
*/
public function queryFunc(){
$count = DB::table('student')->count();
echo $count; // 11
$max = DB::table('student')->max('age');
echo $max; //36
$avg = DB::table('student')->avg('age');
echo $avg; //21.0909
$sum = DB::table('student')->sum('age');
echo $sum; //232
}
概述:
1.Eloquent ORM模型的建立及查询数据
/**
* [ORM操作数据库查询数据]
* @return [type] [数据集合]
*/
public function eloquentORM(){
//1. 查询所有数据
$results1 = Student::all();
$results1 = Student::get();
//2. 根据主键查找其中某条数据
$results2 = Student::find(1001);
//3. 根据主键查找/如果没查到报错
$results3 = Student::findOrFail(1007);
//4. 带条件查询
$results4 = Student::where('id','>',1008)->orderBy('age','desc')->get();
//5. 分段查询
Student::chunk(2,function($results5){});
//6. 聚合函数使用
$count = Student::sum('age');
}
2.Eloquent ORM中新增数据、自定义时间戳、批量赋值
/**
* [使用ORM新增数据]
* @return [object] [新增的数据项]
*/
public function eloquentORMAdd(){
/* $student = new Student();
$student->name = '叮咚叮咚的小溪';
$student->age = 12;
$s = $student->save();
dd($student);*/
//2. 使用模型的Create方法新增数据 ( 报错:需要在Student模型中添加:protected $fillable = ['name','age']; )
/*$result = Student::create(
['name' => '两只吵架的小英短','age' => 1]
);
dd($result);*/
// 3. firstOrCreate() 查询,无则新增,返回新的实例对象
/*$result = Student::firstOrCreate(
['name' => '张飞']
);
dd($result);*/
// 4. firstOrNew() 查询,无则新增,新增需要save,返回新的实例
/*$result = Student::firstOrNew(
['name' => '共烧茄子拌豆腐','age' => 12]
);
$result -> save();
dd($result);*/
}
3.Eloquent ORM修改数据
/**
* [使用ORM更新数据]
*/
public function eloquentORMUpdate(){
//1. 通过模型更新
/*$student = Student::find(1017);
$student->name = '红色小短裙的胖胖猪';
$student->age = 8;
$bool = $student->save();
dd($bool);*/ //true //报错: Call to a member function format() on string 解决:Student模型中关闭方法asDateTime
//2. 通过结合查询语句 批量更新
$rowNum = Student::where('id','>',1022)->update(
['age' => 32]
);
var_dump($rowNum); //int(1)
}
4.Eloquent ORM 删除数据
/**
* [eloquentORMDelete description]
* @return [type] [description]
*/
public function eloquentORMDelete(){
//1. 通过模型删除
/* $student = Student::find(1016);
$bool = $student->delete();
var_dump($bool); //bool(true)*/
//2. 通过主键值删除
/*$numRow = Student::destroy(1022, 1018);
var_dump($numRow); //int(1)*/
//3. 通过指定条件删除
/* $numRow = Student::where('id','>',1013)->delete();
var_dump($numRow); //int(7)*/
}
~~ 致自己:不要失去信心,只要坚持不懈,就终会有成果的!