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

laravel資料庫操作

                                                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();