1. 程式人生 > >Laravel5 操作資料庫的3種方式

Laravel5 操作資料庫的3種方式

一、DB facade(原始查詢)

        // 查詢
        $objectArray=DB::select('select * from student');
        foreach ($objectArray as $obj){
            echo $obj->id;
        }
        // 插入
        $bool=DB::insert('insert into student(name,age) values(?,?)',['tom',18]);
        // 修改
        $num=DB::update('update student set age=? where name=?',[20,'tom']);
        // 刪除
        $num=DB::delete('delete from student where id=?',[1001]);

二、查詢構造器

Laravel查詢構造器提供了方便流暢的介面,用來建立及執行資料庫查詢語法。使用了pdo引數繫結,使應用程式免於sql注入,因此傳入的引數不需要額外轉義特殊字元。基本上可以滿足所有的資料庫操作,而且在所有支援的資料庫系統上都可以執行。

查詢

        // 查詢所有資料
        $objectArray=DB::table('student')->get()->toArray();
        foreach ($objectArray as $object){
            echo $object->id;
        }

        // 根據條件查詢資料
        $objectArray=DB::table('student')->where('id','>',1001)->get()->toArray();
        foreach ($objectArray as $object){
            echo $object->id;
        }

        // 根據多個條件查詢資料
        $objectArray=DB::table('student')->whereRaw('id > ? and age = ?',[1001,15])->get()->toArray();
        foreach ($objectArray as $object){
            echo $object->id;
        }

        // 取出第一條資料(升序/降序)
        $object=DB::table('student')->orderBy('id','desc')->first();
        echo $object->id;

        // 查詢指定欄位名(可以指定欄位名作為陣列下標,不指定預設數字下標,pluck代替lists方法)
        $names=DB::table('student')->pluck('name','id')->toArray();

        // 查詢指定的一個或多個欄位
        $objectArray=DB::table('student')->select('id')->get()->toArray();

        // 根據指定記錄條數查詢資料並可以執行相應的方法
        DB::table('student')->orderBy('id','desc')->chunk(2,function ($objects){
            foreach ($objects as $object){
                if ($object->id==1004){
                    echo 'find';
                }
            }
        });

插入

        // 單條插入
        $bool=DB::table('student')->insert(
            ['name'=>'tom','age'=>18]
        );
        // 插入並獲取id
        $id=DB::table('student')->insertGetId(
            ['name'=>'john','age'=>10]
        );
        // 多條插入
        $bool=DB::table('student')->insert([
            ['name'=>'ke1','age'=>12],
            ['name'=>'he1','age'=>19]
        ]);

修改

       // 單條修改
        $num=DB::table('student')
            ->where('id',1002)
            ->update(
                ['age'=>50]
            );

        // 執行此條語句自增(預設1)
        $num=DB::table('student')->increment('age');
        // 執行此條語句自增(自增3)
        $num=DB::table('student')->increment('age',3);
        // 執行此條語句自減(預設1)
        $num=DB::table('student')->decrement('age');
        // 執行此條語句自減(自減3)
        $num=DB::table('student')->decrement('age',3);

        // 根據條件自減
        $num=DB::table('student')
            ->where('id',1002)
            ->decrement('age',3);

        // 根據條件自減並修改欄位
        $num=DB::table('student')
            ->where('id',1002)
            ->decrement('age',3,['name'=>'ioc']);

刪除

        // 單條刪除
        $num=DB::table('student')->where('id',1003)->delete();
        // 根據條件刪除
        $num=DB::table('student')->where('id','>=',1005)->delete();
        // 刪除整個表
        $num=DB::table('student')->truncate();

聚合函式

        // 統計記錄條數
        $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');

三、Eloquent ORM

Laravel所自帶的Eloquent ORM 是一個ActiveRecord實現,用於資料庫操作。每個資料表都有一個與之對應的模型,用於資料表互動

先新建一個model類檔案,內容如下:

namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
    // 指定資料庫表名
    protected $table='student';
    // 指定主鍵
    protected $primaryKey='id';
    // 自動維護時間戳
    public $timestamps = true;
    // 指定允許批量賦值的欄位(使用create方法批量增加時,需要指定允許的欄位)
    protected $fillable=['name','age'];
    // 指定不允許批量賦值的欄位
    protected $guarded=[];

    // 自動格式化時間
    protected function getDateFormat()
    {
        return time();
    }
    // 直接返回時間戳(getDateFormat和asDateTime同時存在,asDateTime生效)
    protected function asDateTime($value)
    {
        return $value;
    }
}

接著,在控制器裡面呼叫新建的model類

查詢

        // 查詢所有資料
        $array=Student::all()->toArray();
        // 根據主鍵查詢
        $array=Student::find(1001)->toArray();
        // 查不到記錄報錯
        $array=Student::findOrFail(101)->toArray();

        // 【查詢構造器】查詢所有資料,在ORM中省略指定表名,其餘用法一致
        $array=Student::get()->toArray();

插入

        // 模型新增資料
        $student=new Student();
        $student->name='yy';
        $student->age=13;
        $bool=$student->save();

        // 模型create方法批量新增資料
        $object=Student::create(
            ['name'=>'ui','age'=>13]
        );
        // 以屬性查詢記錄,若無則新增
        $object=Student::firstOrCreate(
            ['name'=>'tom']
        );
        // 以屬性查詢記錄,若無則建立新例項,若需要儲存到資料庫則需手動save()
        $object=Student::firstOrNew(
            ['name'=>'tom2']
        );
        $bool=$object->save();

        // 【查詢構造器】插入資料
        $bool=Student::insert(
            ['name'=>'mary','age'=>18]
        );

修改

        // 模型修改資料
        $object=Student::find(1025);
        $object->name='kero';
        $bool=$object->save();

        // 【查詢構造器】根據條件修改
        $num=Student::where('id','=',1025)->update(
            ['age'=>10]
        );

刪除

        // 模型刪除資料
        $object=Student::find(1025);
        $bool=$object->delete();
        // 通過主鍵刪除(也可陣列形式)
        $num=Student::destroy(1019,1020);

        // 【查詢構造器】根據條件刪除
        $num=Student::where('id','>',1016)-&g