一 DB facade
- 查询操作:
DB::select("select * from test"); //返回所有的二位数组 - 新增操作 :
$bool=DB::insert("insert into test(id,name) values(?,?)",[1,'lf']); - 更新操作 :
$bool=DB::update('update test set name= ? where id= ? ',['ls',1]); - 删除操作 :
$line_num=DB::delete('delete from testwhere id= ?',[1]); //返回相对应的行数
二、查询构造器
- 查询:
返回多条数据的数组
$list = DB::table('test')->get();
返回一条数据
$info = DB::table('test')->first();
返回所有id的数组
$id_list = DB::table('test')->pluck('id');
返回单个id
$id = DB::table('test')->value('id');
返回以ID为KEY,name为value的二维数组
$order_list = DB::table('test')->lists('name','id');
利用where条件过滤
$list = DB::table('test')->where('id',1)->get();
$list = DB::table('test')->select('id','name')->where('id','>=',1)->orderBy('id','desc')->get();
多个查询条件
$list = DB::table('test')->whereRaw('id=? and name=?',[1,'lf'])->get();
$where = [
['id','=',1],
['name','=','lf'],
];
$list = DB::table('test')->where($where )->get();
chunk()每次查n条
$test=DB::table("test")->chunk(2,function($Test){ //每次查2条
var_dump($Test);
if(.......) return false; //在满足某个条件下使用return就不会再往下查了
});
- 新增:
//新增一条
$bool=DB::table("test")->insert(['id'=>2,'name'=>'lf']);
//新增一条并且返回ID
$id=DB::table("test")->insertGetId(['id'=>2,'name'=>'lf']);
//新增多条数据
$bool=DB::table("test")->insert([ ['id'=>1,'name'=>'lf'],['id'=>2,'name'=>'ls']])
- 修改 删除
修改单条数据
$bool=DB::table("test")->where('id',1)->update(['name'=>'ls']);
字段自增1
$bool=DB::table("test")->where('id',1)->increment("order_num");
字段自减1
$bool=DB::table("test")->where('id',1)->decrement("order_num");
字段自增5
$bool=DB::table("test")->where('id',1)->increment("order_num",5);
自增并且修改其他字段
$bool=DB::table("test")->where('id',1)->increment("order_num",3,['name'=>'lfs']);
删除
$line_num=DB::table("test")->where('id',1)->delete();
$line_num=DB::table("test")->where('id','>',1)->delete();
删除整表,不能恢复,谨慎使用
$num=DB::table("test")->truncate();
DB::table('test')->count();
DB::table('test')->max('age');
DB::table('test')->avg('point');
DB::table('test')->sum('point');
三 Eloquent ORM
由于 Eloquent 模型本质上就是查询构建器,你可以在Eloquent查询中使用查询构建器的所有方法。
- 模型的建立
继承Illuminate\Database\Eloquent\Model
指定表名
protected $table= 'vipinfo';
指定主键
protected $primaryKey= 'id';
Eloquent 默认每张表的主键名为id,你可以在模型类中定义一个 $primaryKey 属性来覆盖该约定。此外,Eloquent 默认主键字段是自增的整型数据,这意味着主键将会被自动转化为 int 类型,如果你想要使用非自增或非数字类型主键,必须在对应模型中设置 $incrementing 属性为 false。
默认插入的时间格式
默认情况下,Eloquent 期望 created_at 和updated_at 已经存在于数据表中,如果你不想要这些 Laravel 自动管理的数据列,在模型类中设置 $timestamps 属性为 false:
public $timestamps = false;
如果你需要自定义时间戳格式,设置模型中的 $dateFormat 属性。该属性决定日期被如何存储到数据库中,以及模型被序列化为数组或 JSON 时日期的格式:
protected $dateFormat = 'U';
protected function getDateFormat(){
return time();
}
如果你需要自定义用于存储时间戳的字段名称,可以在模型中设置 CREATED_AT 和 UPDATED_AT 常量:
const CREATED_AT = 'create_time';
const UPDATED_AT = 'update_time';
数据库连接
protected $connection = 'connection-name';
- 查询数据
$list = Test::all();
$list = Test::get();
foreach ($list as $info) {
echo $info->name;
}
$list = Test::where('id','>=', 1)->orderBy('id', 'desc')->take(10)->get();
$info = Test::find(1);
$infos= Test::find([1, 2, 3]);
Illuminate\Database\Eloquent\ModelNotFoundException 异常将会被抛出:
$info = Test::findOrFail(1);
$info = Test::firstOrFail(1);
- 新增数据
save方法新增
$test = new Test();
$test->name = 'lf';
$test->title = 'nnnn';
$test->save();
create方法新增
需要在模型里增加:
//允许批量赋值的字段
protected $fillable=['name','title','type'];
然后调用的地方
Test::create(['name'=>'lf','title'=>'nnnn','type'=>1]);
firstOrCreate()以属性查找,若没有则新增
$test_info=Test::firstOrCreate(['name'=>'lf']);
firstOrNew()以属性查找记录,若没有则会创建新的实例。若需要保存,则自己调用save方法()
$test=Test::firstOrNew(['name'=>'lf']);
$test->save();
- 修改 删除
$test = Test::find(1);
$test->name = 'ls';
$bool = $test->save();
$line_num = $test->delete();
$line_num = Test::destroy(10);
$line_num=Test::where('id','>',1)->update(['name'=>'lf']);