1. 程式人生 > >laravel 三種資料庫操作

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']);