日拱一卒无有尽,功不唐捐终入海

Laravel操作数据库的三种方法

Laravel Sam 674℃ 0评论

一、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]);

二、查询构造器
use Illuminate\Support\Facades\DB;

查询:
返回多条数据的数组
$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查询中使用查询构建器的所有方法。

模型的建立
use Illuminate\Database\Eloquent\Model;
继承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();
$users = User::select([‘name’])->get();
$info = Test::find(1);
$infos= Test::find([1, 2, 3]);

Illuminate\Database\Eloquent\ModelNotFoundException 异常将会被抛出:
$info = Test::findOrFail(1);
$info = Test::firstOrFail(1);
$users = User::all([‘name’]);
$admin_users = User::where(‘role’, ‘admin’)->get([‘id’, ‘name’]);
$user = User::find($user_id, [‘name’]);

新增数据
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’]);

 

转载请注明:PHP笔记 » Laravel操作数据库的三种方法

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)