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

laravel的資料庫操作(三種)

laravel中提供了DB facade(原始查詢)、查詢構造器和
Eloquent ORM三種操作資料庫方式


1.新建資料表與連線資料庫
1.1 新建資料表
學生表
 CREATE TABLE IF NOT EXISTS student(
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '姓名',
  `age` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年齡',
  `sex` TINYINT UNSIGNED NOT NULL DEFAULT 10 COMMENT '性別',
  `created_at` INT NOT NULL DEFAULT 0 COMMENT '新增時間',
  `updated_at` INT NOT NULL DEFAULT 0 COMMENT '修改時間'


)ENGINE=INNODB DEFAULT CHARSET = UTF8 AUTO_INCREMENT=1001 COMMENT='學生表';


1.2連線資料庫
config/database.php 注意觀察database.php 中表字首
.env
以及.env中的部分引數配置
DB_HOST=localhost //host
DB_DATABASE=laravel //資料庫名字
DB_USERNAME=root //賬號
DB_PASSWORD=root //密碼


2.使用DB facade實現CURD


//insert插入
//$bools = DB::insert('insert into  student (name,age) values(?,?)',['imooc',19]);
//update更新
//$numbers = DB::update('update student set age = ? where name = ?',[20,'sean']);


//var_dump($numbers);
//查詢
//$students = DB::select('select * from student where id >?',[1001]);
//dd($students);//格式化的輸出,更加美觀
//刪除
$num = DB::delete('delete from student where id > ?',[1001]);
var_dump($num);


2.查詢構造器
2.1查詢構造器簡介及新增資料
laravel查詢構造器(query builder)提供方便、流暢的介面,
用來建立及執行資料庫查詢語法
使用pdo引數繫結,以保護應用程式免於SQL注入,因此傳入的
引數不需要額外的轉義特殊字元
基本可以滿足所有的資料庫操作,而且在所有支援的資料庫
系統上都可以執行
新增資料
//插入
//$bool = DB::table('student')->insert(
// ['name'=>'imooc','age'=>18]


// );
//var_dump($bool);
//$id = DB::table('student')->insertGetId(
// ['name'=>'sean','age'=>18]
// );
//var_dump($id);
//多個引數的插入
$bool = DB::table('student')->insert([
['name'=>'name1','age'=>18],
['name'=>'name2','age'=>19]
]);
var_dump($bool);


2.2使用查詢構造器更新資料
@1更新為指定的內容、
@2自增以及自減
//更新資料要帶上條件where
//$num = DB::table('student')
//->where ('id',1004)
//->update(['age'=>30]);
//var_dump($num);



//自增
//$num = DB::table('student')->increment('age');
//$num = DB::table('student')->increment('age',3);
//自減
//$num = DB::table('student')->decrement('age',3);


//$num = DB::table('student')
//->where('id',1004)
//->decrement('age',3);
//自增的同時修改其他的引數
$num = DB::table('student')
->where('id',1004)
->increment('age',1,['name'=>'iimooc']);
var_dump($num);


2.3使用查詢構造器刪除資料
@1 delete
//刪除一行
//$num = DB::table('student')
//->where('id',1004)
//->delete();
//刪除符合條件的多行
//$num = DB::table('student')
//->where('id','>=',1005)
//->delete();
//var_dump($num);


@2 truncate//很危險一般不建議用TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其資料,請使用 DROP TABLE 語句。
正因為上述原理,如果有ROLLBACK語句,DELETE操作將被撤銷,但TRUNCATE不會撤銷。


//DB::table('student')->truncate();
//這個操作不返回任何的東西


2.4使用查詢構造器查詢資料
@1 get()
//get()獲取表的所有資料
//$students = DB::table('student')->get();
@2 first()
//first()獲取結果中的第一條資料


//$students = DB::table('student')
//->orderBy('id','desc')
//->first();
@3 where()
//where
//$students = DB::table('student')
//->where('id','>=','1002')
//->get();
//where加多個條件
//$students = DB::table('student')
//->whereRaw('id>=? and age >?',[1001,18])
//->get();
//dd($students);
@4 pluck()
//pluck返回結果集中的指定欄位
//$name = DB::table('student')
//->pluck('name');
@5 lists()
//lists 可以指定返回某個鍵作為下標
//$name = DB::table('student')
//->lists('name','id');
@6 select()
//select
//$students = DB::table('student')
//->select('id','name','age')
//->get();
@7 chunk()
//chunk分段進行獲取,真實專案中會一次插入一千條
//可以加入return false讓語句進行停止
echo '<pre>';
DB::table('student')->chunk(2,function($students){
var_dump($students);
//一般配合if條件使用
//return false;
});




2.5查詢構造器中的聚合函式
@1 count()$num = DB::table('student')->count();
@2 max()$max = DB::table('student')->max('age');
@3 min()$min = DB::table('student')->min('age');
@4 avg()$avg = DB::table('student')->avg('age');
@5 sum()$sum = DB::table('student')->sum('age');




3.Eloquent ORM


3.1Eloquent ORM簡介、模型的建立以及查詢資料
@1 Eloquent ORM的簡介
laravel所自帶的Eloquent ORM是一個優美簡潔的ActiveRecord實現,用來實現資料庫操作
每個資料表都有一個與之相應的“模型”(Model)用於和資料表互動


@2 模型的建立


<?php
namespace App;
use Illuminate\Database\Eloquent\Model;


class Student extends Model
{
//指定表名
protected $table = 'student';
//指定主鍵
protected $primaryKey = 'id';
}




@3 Eloquent ORM中的查詢
#1 all(),find(),findOrFail()
#2 查詢構造器在ORM中的使用
//all()
//$students = Student::all();
//find()
//$student = Student::find(1001);
//findOrFail()根據條件查詢,沒有找到就報錯
//$student = Student::findOrFail(1006);
//get
//$student = Student::get();
//where and first
//$students = Student::where('id','>=','1001')
//->orderBy('age','desc')
//->first();
//chunk
//echo '<pre>';
//Student::chunk(2,function($students){
// var_dump($students);
//});


//聚合函式 count max min 等等
//$num = Student::count();
$max = Student::where('id','>=',1001)
->max('age');
var_dump($max);


//dd($students);


3.2Eloquent ORM中新增資料、自定義的時間戳以及批量賦值的使用
@1 通過模型新增資料(設計到自定義時間戳)


Model中的修改
//指定允許批量賦值的欄位
protected $fillable = ['name','age'];
//指定不允許批量賦值的欄位
protected $guarded = [];




//關閉顯示建立和修改時間(自動維護時間戳)一般開啟
public $timestamps = true;
//讓時間顯示成為unix時間戳 
protected function getDateFormat()
{
return time();
}
protected function asDateTime($val)
{
return $val;
}












@2 使用模型的Create方法新增資料(涉及到批量賦值)


//使用模型新增資料
//$student = new Student();
//給模型賦值
//$student->name = 'seanaq';
//$student->age = 18;
//用來儲存
//$bool = $student->save();
//dd($bool);
//$student = Student::find(1009);
//echo $student->created_at;
//echo date('Y-m-d H-i-s',$student->created_at);


//使用模型的Create方法新增資料
//$student = Student::create(
// ['name'=>'imooc','age'=>18]);
//dd($student);




//firstOrcreate()以屬性查詢,若沒有則新增例項
//$student = Student::firstOrcreate(
// ['name'=>'imoocs']
// );


//firstOrNew()以屬性查詢,若沒有則新增例項.需要儲存的話自己呼叫save()
$student = Student::firstOrNew(
['name'=>'imoocss']
);
$bool = $student->save();


dd($bool);




3.3使用Eloquent ORM修改資料
@1 通過模型更新
//$student = Student::find(1011);
//$student->name = 'kitty';
//$bool = $student->save();
//var_dump($bool);


@2 結合查詢語句批量更新


$num = Student::where('id','>',1009)->update(
['age'=>41]
);
var_dump($num);


3.4使用Eloquent ORM刪除資料
@1 通過模型刪除
//$student = Student::find(1012);
//$bool = $student->delete();
//var_dump($bool);


@2 通過主鍵值刪除
//刪除單個
//$num = Student::destroy(1007);
//刪除多個
//$num = Student::destroy(1008,1009);
//也可以寫在陣列中
//$num = Student::destroy([1004,1005]);
//var_dump($num);
@3 根據指定條件刪除
$num = Student::where('id','<',1002)->delete();
var_dump($num);