laravel資料庫操作
阿新 • • 發佈:2019-01-11
laravel資料庫操作
連線資料庫:在.env檔案裡配置
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=12345678
1 使用DB facade原生實現CURD:
新建控制器StudentController.php:
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; class StudentController extends Controller{ public function index(){ // 查詢資料 返回值是一個數組 $student = DB::select('SELECT username FROM user WHERE id = ?',[1]); // 插入一條資料 返回影響行數 $insertNum = DB::insert('INSERT INTO user (username,password)VALUES(?,?)',["張三",sha1("123456")]); // 修改一條資料 返回影響行數 $updateNum = DB::update("UPDATE user SET username = ? WHERE id = ?",['李四',1]); // 刪除一條資料 返回影響行數 $deleteNum = DB::delete("DELETE FROM user WHERE id > ?",[3]); } }
在routes.php裡繫結路由到控制器/方法(StudentController/index);
routes.php:
Route::get('student',['uses'=>'[email protected]']);
2 使用查詢構造器實現CURD
之前的路由不變
StudentController.php:
public function index(){ // 插入一條資料 返回值是bool值 DB::table('user')->insert(['username'=>'張三','password'=>sha1('123456')]); // 插入多條資料 返回值是bool DB::table('user')->insert([ ['username'=>'張三','password'=>sha1('123456')], ['username'=>'李四','password'=>sha1('123456')] ]); // 插入一條資料並返回自增id DB::table('user')->insertGetId(['username'=>'張三','password'=>sha1('123456')]); // 更新 返回影響行數 DB::table('user')->where('id',1)->update(['username'=>'張三']); // 更新 欄位自增返回值是影響行數 如果不傳第二個引數 預設自增1 DB::table('user')->where('id',1)->increment('age',2); // 更新 欄位自減 返回值是影響行數 同上 DB::table('user')->where('id',1)->decrement('age',1); // 也可以在自增自減的同時更新其他資料 DB::table('user')->where('id',1)->decrement('age',1,['username'=>'李四']); // 刪除資料 返回影響行數 DB::table('user')->where('id','>',16)->delete(); DB::table('user')->truncate(); //清空資料表,無返回值 //查詢 // get():查詢所有欄位資料 // first():查詢第一條 // where():指定取出的條件 // pluck():查詢指定的欄位 // lists():查詢指定的某個欄位 並使用某個欄位作為鍵 // select():查詢指定的某些欄位 // chunk():指定每次查詢的個數 dump(DB::table('user')->get()); //查詢所有 dump(DB::table('user')->first()); //從結果集中取出第一條 dump(DB::table('user')->where('id','=',1)->get()); dump(DB::table('user')->whereRaw('id = ? and username = ?',[1,'張三'])->get()); //指定取出的條件 dump(DB::table('user')->pluck('username')); //查詢指定的欄位 dump(DB::table('user')->lists('username','id')); //查詢指定的欄位 並使用某個欄位作為鍵 dump(DB::table('user')->select('id','username')->get()); //指定查詢某些欄位 DB::table('user')->chunk(2,function($student){ dump($student); //每次查詢兩條知道查詢結束 }); //聚合函式 $max = DB::table('user')->max('age'); $min = DB::table('user')->min('age'); $avg = DB::table('user')->avg('age'); $sum = DB::table('user')->sum('age'); $count = DB::table('user')->count(); }
3 Eloquent ORM 操作資料庫
使用模型:student.php:
<?php
namespace App;
use Illuminate\database\Eloquent\Model;
class Student extends Model{
// 如果不指定表明 則表名預設和模型名的複數一致
protected $table = 'student'; //指定表名
protected $primaryKey = 'id'; //指定主鍵
}
控制器StudentController.php:
查詢資料:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Student; //引入student模型
class StudentController extends Controller{
public function index(){
//查詢資料
dump(Student::all()); //查詢表的所有記錄
dump(Student::find(1)); //查詢指定主鍵的記錄
// dump(Student::findOrFail(33));//查詢指定主鍵的記錄 沒有會報錯
//還可以使用查詢構造器裡的方法
dump(Student::get());//查詢表的所有記錄
}
}
新增資料:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Student;
class StudentController extends Controller{
public function index(){
// 使用模型 新增資料
$student = new Student();
$student->username = '李四';
$student->password = sha1('123456');
$student->age = 21;
$student->save(); //儲存資料
// 使用create方法建立資料 指定允許批量新增的資料欄位
Student::create(
['username'=>'小明','password'=>sha1('123456'),'age'=>22]
);
// firstOrCreate 查詢指定使用者 不存在則建立
// dump(Student::firstOrCreate(['username'=>'小明']));
// firstOrNew 查詢指定使用者 不存在則手動建立
$student = Student::firstOrNew(
['username'=>'小']
);
$student->save(); //手動儲存 //返回值是bool值
}
}
PS:使用save方法儲存時會提示沒有create_at和update_at兩個欄位,這兩個是資料建立時間和修改時間,自動修改,如果不想用可以在模型裡修改:
Student.php:
//指定資料新增時間和修改時間 必須是creat_at和update_at
public $timestamps = true; //改為false就是不使用
// 指定資料建立修改的時間戳
protected function getDateFormat(){
return time();
}
// 獲取時間資料時轉化為時間戳
protected function asDateTime($val){
return $val;
}
PS:使用create方法新增資料是需要在模型裡指定哪些欄位可以批量新增
Student.php:
//指定允許批量新增的資料欄位
protected $fillable = ['username','password','age'];
修改資料:
//第一種 通過模型更新//返回值是bool值
$student = Student::find(1);
$student->username = 'admin';
$student->save();
//第二種 通過查詢語句批量更新 返回值是影響行數
Student::where('id','=',1)->update(
['username'=>'張三']
);
刪除資料:
// 刪除
// 1 通過模型刪除 返回值是一個bool值
$student = Student::find(6);
$student->delete();
// 2 通過主鍵刪除 返回值是影響行數
Student::destroy(4,5);
// 3 通過條件刪除 返回值是影響行數
Student::where('id','>',7)->delete();