laravel 三種資料庫操作
一 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']);