laravel的数据库操作(三种)

laravel中提供了DB facade(原始查找)、查询构造器和
Eloquent ORM三种操作数据库方式


1.新建数据表与连接数据库
1.1 新建数据表
学生表
 CREATE TABLE IF NOT EXISTS student(
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '姓名',
  `age` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
  `sex` TINYINT UNSIGNED NOT NULL DEFAULT 10 COMMENT '性别',
  `created_at` INT NOT NULL DEFAULT 0 COMMENT '新增时间',
  `updated_at` INT NOT NULL DEFAULT 0 COMMENT '修改时间'


)ENGINE=INNODB DEFAULT CHARSET = UTF8 AUTO_INCREMENT=1001 COMMENT='学生表';


1.2连接数据库
config/database.php 注意观察database.php 中表前缀
.env
以及.env中的部分参数配置
DB_HOST=localhost //host
DB_DATABASE=laravel //数据库名字
DB_USERNAME=root //账号
DB_PASSWORD=root //密码


2.使用DB facade实现CURD


//insert插入
//$bools = DB::insert('insert into  student (name,age) values(?,?)',['imooc',19]);
//update更新
//$numbers = DB::update('update student set age = ? where name = ?',[20,'sean']);


//var_dump($numbers);
//查询
//$students = DB::select('select * from student where id >?',[1001]);
//dd($students);//格式化的输出,更加美观
//删除
$num = DB::delete('delete from student where id > ?',[1001]);
var_dump($num);


2.查询构造器
2.1查询构造器简介及新增数据
laravel查询构造器(query builder)提供方便、流畅的接口,
用来建立及执行数据库查找语法
使用pdo参数绑定,以保护应用程序免于SQL注入,因此传入的
参数不需要额外的转义特殊字符
基本可以满足所有的数据库操作,而且在所有支持的数据库
系统上都可以执行
新增数据
//插入
//$bool = DB::table('student')->insert(
// ['name'=>'imooc','age'=>18]


// );
//var_dump($bool);
//$id = DB::table('student')->insertGetId(
// ['name'=>'sean','age'=>18]
// );
//var_dump($id);
//多个参数的插入
$bool = DB::table('student')->insert([
['name'=>'name1','age'=>18],
['name'=>'name2','age'=>19]
]);
var_dump($bool);


2.2使用查询构造器更新数据
@1更新为指定的内容、
@2自增以及自减
//更新数据要带上条件where
//$num = DB::table('student')
//->where ('id',1004)
//->update(['age'=>30]);
//var_dump($num);



//自增
//$num = DB::table('student')->increment('age');
//$num = DB::table('student')->increment('age',3);
//自减
//$num = DB::table('student')->decrement('age',3);


//$num = DB::table('student')
//->where('id',1004)
//->decrement('age',3);
//自增的同时修改其他的参数
$num = DB::table('student')
->where('id',1004)
->increment('age',1,['name'=>'iimooc']);
var_dump($num);


2.3使用查询构造器删除数据
@1 delete
//删除一行
//$num = DB::table('student')
//->where('id',1004)
//->delete();
//删除符合条件的多行
//$num = DB::table('student')
//->where('id','>=',1005)
//->delete();
//var_dump($num);


@2 truncate//很危险一般不建议用TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
正因为上述原理,如果有ROLLBACK语句,DELETE操作将被撤销,但TRUNCATE不会撤销。


//DB::table('student')->truncate();
//这个操作不返回任何的东西


2.4使用查询构造器查询数据
@1 get()
//get()获取表的所有数据
//$students = DB::table('student')->get();
@2 first()
//first()获取结果中的第一条数据


//$students = DB::table('student')
//->orderBy('id','desc')
//->first();
@3 where()
//where
//$students = DB::table('student')
//->where('id','>=','1002')
//->get();
//where加多个条件
//$students = DB::table('student')
//->whereRaw('id>=? and age >?',[1001,18])
//->get();
//dd($students);
@4 pluck()
//pluck返回结果集中的指定字段
//$name = DB::table('student')
//->pluck('name');
@5 lists()
//lists 可以指定返回某个键作为下标
//$name = DB::table('student')
//->lists('name','id');
@6 select()
//select
//$students = DB::table('student')
//->select('id','name','age')
//->get();
@7 chunk()
//chunk分段进行获取,真实项目中会一次插入一千条
//可以加入return false让语句进行停止
echo '<pre>';
DB::table('student')->chunk(2,function($students){
var_dump($students);
//一般配合if条件使用
//return false;
});




2.5查询构造器中的聚合函数
@1 count()$num = DB::table('student')->count();
@2 max()$max = DB::table('student')->max('age');
@3 min()$min = DB::table('student')->min('age');
@4 avg()$avg = DB::table('student')->avg('age');
@5 sum()$sum = DB::table('student')->sum('age');




3.Eloquent ORM


3.1Eloquent ORM简介、模型的建立以及查询数据
@1 Eloquent ORM的简介
laravel所自带的Eloquent ORM是一个优美简洁的ActiveRecord实现,用来实现数据库操作
每个数据表都有一个与之相应的“模型”(Model)用于和数据表交互


@2 模型的建立


<?php
namespace App;
use Illuminate\Database\Eloquent\Model;


class Student extends Model
{
//指定表名
protected $table = 'student';
//指定主键
protected $primaryKey = 'id';
}




@3 Eloquent ORM中的查询
#1 all(),find(),findOrFail()
#2 查询构造器在ORM中的使用
//all()
//$students = Student::all();
//find()
//$student = Student::find(1001);
//findOrFail()根据条件查找,没有找到就报错
//$student = Student::findOrFail(1006);
//get
//$student = Student::get();
//where and first
//$students = Student::where('id','>=','1001')
//->orderBy('age','desc')
//->first();
//chunk
//echo '<pre>';
//Student::chunk(2,function($students){
// var_dump($students);
//});


//聚合函数 count max min 等等
//$num = Student::count();
$max = Student::where('id','>=',1001)
->max('age');
var_dump($max);


//dd($students);


3.2Eloquent ORM中新增数据、自定义的时间戳以及批量赋值的使用
@1 通过模型新增数据(设计到自定义时间戳)


Model中的修改
//指定允许批量赋值的字段
protected $fillable = ['name','age'];
//指定不允许批量赋值的字段
protected $guarded = [];




//关闭显示创建和修改时间(自动维护时间戳)一般打开
public $timestamps = true;
//让时间显示成为unix时间戳 
protected function getDateFormat()
{
return time();
}
protected function asDateTime($val)
{
return $val;
}












@2 使用模型的Create方法新增数据(涉及到批量赋值)


//使用模型新增数据
//$student = new Student();
//给模型赋值
//$student->name = 'seanaq';
//$student->age = 18;
//用来保存
//$bool = $student->save();
//dd($bool);
//$student = Student::find(1009);
//echo $student->created_at;
//echo date('Y-m-d H-i-s',$student->created_at);


//使用模型的Create方法新增数据
//$student = Student::create(
// ['name'=>'imooc','age'=>18]);
//dd($student);




//firstOrcreate()以属性查找,若没有则新增实例
//$student = Student::firstOrcreate(
// ['name'=>'imoocs']
// );


//firstOrNew()以属性查找,若没有则新增实例.需要保存的话自己调用save()
$student = Student::firstOrNew(
['name'=>'imoocss']
);
$bool = $student->save();


dd($bool);




3.3使用Eloquent ORM修改数据
@1 通过模型更新
//$student = Student::find(1011);
//$student->name = 'kitty';
//$bool = $student->save();
//var_dump($bool);


@2 结合查询语句批量更新


$num = Student::where('id','>',1009)->update(
['age'=>41]
);
var_dump($num);


3.4使用Eloquent ORM删除数据
@1 通过模型删除
//$student = Student::find(1012);
//$bool = $student->delete();
//var_dump($bool);


@2 通过主键值删除
//删除单个
//$num = Student::destroy(1007);
//删除多个
//$num = Student::destroy(1008,1009);
//也可以写在数组中
//$num = Student::destroy([1004,1005]);
//var_dump($num);
@3 根据指定条件删除
$num = Student::where('id','<',1002)->delete();
var_dump($num);





















































猜你喜欢

转载自blog.csdn.net/qq_35472880/article/details/80086170
今日推荐