laravel 三种数据库操作

一 DB facade

  1. 查询操作:
    DB::select("select * from test"); //返回所有的二位数组
  2. 新增操作 :
    $bool=DB::insert("insert into test(id,name) values(?,?)",[1,'lf']);
  3. 更新操作 :
    $bool=DB::update('update test set name= ? where id= ? ',['ls',1]);
  4. 删除操作 :
    $line_num=DB::delete('delete from testwhere id= ?',[1]); //返回相对应的行数

二、查询构造器

  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就不会再往下查了
});

  1. 新增:
    //新增一条
    $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']])

  1. 修改 删除

修改单条数据
$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查询中使用查询构建器的所有方法。

  1. 模型的建立
    继承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';

  1. 查询数据
    $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);

  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();

  1. 修改 删除
    $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']);

猜你喜欢

转载自blog.csdn.net/weixin_40575384/article/details/82112991