Laravel基礎篇學習筆記(二):資料庫操作
阿新 • • 發佈:2019-02-06
1)DB facade(原始查詢)
a)連線資料庫;
配置資料庫在目錄 laravel/config/database.php
'default' => env('DB_CONNECTION', 'mysql'),
//預設配置為mysql,因此檢視connections裡對應的mysql項
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge' ),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
// 這裡的env指的是 laravel/.env,配置內容為:
DB_HOST=127.0 .0.1
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root
b)使用DB facade實現CURD;
// 使用 DB 類操作資料庫,必須呼叫 DB facade 類
use Illuminate\Support\Facades\DB;
// 新增
$bool = DB::insert('insert into student(name,age) values(?, ?)',
['imooc', 18]);
var_dump($bool);
// 更新
$num = DB::update('update student set age = ? where name = ?' ,
[20, 'sean']);
var_dump($num);
// 查詢
$students = DB::select('select * from student where id = ?',
[1001]);
dd($students);
// 刪除
$num = DB::delete('delete from student where id > ?',
[1001]);
var_dump($num);
2)查詢構造器
a)查詢構造器簡介及新增資料
// 新增一條資料,並獲取其ID值
$id = DB::table('student')->insertGetId(
['name' => 'vision', 'age' => 18]
);
var_dump($id);
// 新增多條資料,返回布林值表明執行成功或失敗
$bool = DB::table('student')->insert([
['name' => 'name1', 'age' => 20],
['name' => 'name2', 'age' => 21],
]);
var_dump($bool);
b)使用查詢構造器更新資料
// 查詢構造器更新資料,返回修改的數量
$num = DB::table('student')
->where('id', 1002)
->update(['age' => 30]);
// 不加條件預設所有自增自減一,返回修改的數量
$num = DB::table('student')->increment('age'); //自增
$num = DB::table('student')->decrement('age'); //自減
// 加上條件自增自減,返回修改的數量
$num = DB::table('student')->increment('age', 3);
$num = DB::table('student')->decrement('age', 3);
// 把id為1002的age欄位自減3,並把name欄位改為iimooc,返回修改的數量
$num = DB::table('student')
->where('id', 1002)
->decrement('age', 3, ['name' => 'iimooc']);
c)使用查詢構造器刪除資料
// 刪除ID為1007的資料,返回修改的數量
$num = DB::table('student')
->where('id', 1007)
->delete();
// 刪除ID大於等於1005的資料,返回修改的數量
$num = DB::table('student')
->where('id', '>=', 1005)
->delete();
// 清空表資料,無返回資料
DB::table('student')->truncate();
d)使用查詢構造器查詢資料
get() 獲取所有資料
$students = DB::table('student')->get();
first() 獲取第一條資料
$student = DB::table('student')
->orderBy('id', 'desc')
->first();
where() 新增查詢條件
$students = DB::table('student')
->where('id', '>=', 1002)
->get();
whereRaw() 多個查詢條件
$students = DB::table('student')
->whereRaw('id >= ? and age > ?', [1001, 18])
->get();
pluck() 結果集中指定的欄位
$names = DB::table('student')
->pluck('name');
lists() 結果集中指定的欄位
$names = DB::table('student')
->lists('name');
// 查詢結果如下
array:5 [▼
0 => "name1"
1 => "name2"
2 => "name3"
3 => "name4"
4 => "name5"
]
// 指定ID作為下標
$names = DB::table('student')
->lists('name', 'id');
// 查詢結果如下
array:5 [▼
1001 => "name1"
1002 => "name2"
1003 => "name3"
1004 => "name4"
1005 => "name5"
]
select() 選擇指定欄位進行查詢
$students = DB::table('student')
->select('id', 'name', 'age')
->get();
chunk() 每次查詢兩條資料,直到結束
echo "<pre>";
DB::table('student')->chunk(2, function($students) {
var_dump($students);
// if(你的條件) {
// return false; // 在特定條件下執行可以使查詢停止
// }
});
e)查詢構造器中的聚合函式
// 統計表的記錄數
$num = DB::table('student')->count();
// 計算最大值
$max = DB::table('student')->max('age');
// 計算最小值
$min = DB::table('student')->min('age');
// 計算平均數
$avg = DB::table('student')->avg('age');
// 計算和
$sum = DB::table('student')->sum('age');
3)Eloquent ORM
a)Eloquent ORM簡介、模型的建立及查詢資料
建立模型檔案 laravel/app/Student.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
// 指定表名
protected $table = 'student';
// 指定id
protected $primaryKey = 'id';
}
控制器路徑 laravel/app/Http/Controllers/StudentController.php
// 記住需要呼叫該模型
use App\Student;
// all() 查詢表裡所有資料
$students = Student::all();
// find() 查詢指定ID
$students = Student::find(1001);
// findOrFail() findOrFail() 失敗會報錯,find() 會返回null
$students = Student::findOrFail(1006);
// 使用查詢構造器的方法也可查詢資料
$students = Student::get();
$students = Student::where('id', '>', '1001')
->orderBy('age', 'desc')
->first();
echo "<pre>";
Student::chunk(2, function($students) {
var_dump($students);
});
// 聚合函式
$num = Student::count();
$max = Student::where('id', '>', 1001)->max('age');
var_dump($max);
b)Eloquent ORM中新增資料、自定義時間戳及批量賦值的使用
控制器路徑 laravel/app/Http/Controllers/StudentController.php
有部分功能需要在模型檔案開啟才能夠使用
// 1. 使用模型新增資料
$student = new Student();
$student->name = 'sean2';
$student->age = 20;
$bool = $student->save();
// 2. 使用模型查詢指定欄位(參照模型檔案設定2)
$student = Student::find(1015);
echo $student->created_at . "<br />";
echo date('Y:m:d H:i:s', $student->created_at);
// 3. 使用模型的Create方法新增資料(參照模型檔案設定3)
$student = Student::create(
['id' => '1', 'name' => 'imddooc', 'age' => 18, 'sex' => '5']
);
//此處因沒有設定id,sex欄位,插入資料不會賦值
dd($student);
// 4. firstOrCreate() 有匹配的,就不新增,沒有則新增資料
$student = Student::firstOrCreate(
['name' => '555']
);
// 5. firstOrNew() 以屬性查詢使用者,如果沒有則建立新的例項,需要儲存自己呼叫save
$student = Student::firstOrNew(
['name' => '5555']
);
$bool = $student->save();
模型檔案 laravel/app/Student.php
// 2. 設定自動維護時間戳,會幫我們把欄位created_at和updated_at的時間新增進去;
// 預設開啟,設定成false則關閉
public $timestamps = true;
// 設定created_at和updated_at的時間形式,預設為當前年份,如“2017”;設定getdateFormat可實現顯示時間戳
protected function getdateFormat()
{
return time();
}
// 預設輸出created_at和updated_at時,會自動格式化時間;設定asDateTime可以實現直接輸出
protected function asDateTime($val)
{
return $val;
}
// 3. 指定允許批量賦值的欄位,只有這樣才能讓create方法成功,沒有設定則按預設的來
protected $fillable = ['name', 'age'];
// 指定不允許批量賦值的欄位
protected $guarded = [];
c)使用Eloquent ORM修改資料
// 通過模型更新資料
$student = Student::find(1021);
$student->name = 'kitty';
$bool = $student->save(); // 會修改name和updated_at欄位
var_dump($bool);
// 結合查詢語句批量更新
$num = Student::where('id', '>', 1020)->update(
['age' => 41]
);
var_dump($num);
d)使用Eloquent ORM刪除資料
// 通過模型刪除;刪除時如果沒有該資料會報錯
$student = Student::find(1021);
$bool = $student->delete();
var_dump($student);
// 通過主鍵刪除;刪除時沒有該資料返回int(0)
$num = Student::destroy(1022);
$num = Student::destroy(1024,1025);
$num = Student::destroy([1019,1020]);
var_dump($num);
// 刪除指定條件的資料
$num = Student::where('id', '>', 1015)->delete();
var_dump($num);