laravel基礎--6.3 Eloquent ORM

定義模型

 

默認規則是小寫的模型類名複數格式作爲與其對應的表名(除非在模型類中明確指定了其它名稱)。所以,在本例中,Eloquent 認爲 Student模型存儲記錄在 students 表中。可以在模型中定義 table 屬性來指定自定義的表名:

Eloquent 默認每張表的主鍵名爲 id,可以在模型類中定義一個 $primaryKey 屬性來覆蓋該約定。

Student.php Models

<?php


namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Student extends Model{

    /**
     * 關聯到模型的數據表
     *
     * @var string
     */
    protected $table = 'student';

    /**
     * 定義主鍵
     *
     * @var string
     */
    protected $primaryKey = 'id';


    /**
     * 表明模型是否應該被打上時間戳
     *
     * @var bool
     */
    public $timestamps = true;

    /**
     * 模型日期列的存儲格式
     * $dateFormat 屬性。該屬性決定日期被如何存儲到數據庫中,以及模型被序列化爲數組或 JSON 時日期的格式
     * $dateFormat 可以接受的值和 php 中 date () 函數第一個參數可以接受的值一樣。
     *  U 的意思就是我們平常說的時間戳 (10 位到秒)
     * Y m d H i s 都可用
     * @var string
     */
//    protected $dateFormat = 'm';
//
    /*
     * 如果同時定義了$dateFormat getDateFormat, 數據表的時間類型 以getDateFormat 的返回值爲準。
     */
    protected function getDateFormat(){
      //  return  date("Ymd",time());
        return time();
    }
    /*
     *
     * 不寫此函數,echo 時間戳自動轉爲2019-08-01 15:03:03 格式
     * echo $student->created_at;
     *
     */
    protected function asDateTime($value)
    {
        return $value;
    }


//    自定義用於存儲時間戳的字段名稱,可以在模型中設置 CREATED_AT 和 UPDATED_AT 常量:

//    const CREATED_AT = 'creation_date';
//    const UPDATED_AT = 'last_update';


//二者互斥,只能定義一個 $fillable $guarded
    /**
     * 可以被批量賦值的屬性.
     * 白名單
     * @var array
     */
   // protected $fillable = ['name'];

    /**
     * 不能被批量賦值的屬性
     * 黑名單
     * @var array
     */
   // protected $guarded = ['price'];
    protected $guarded = [];//所有屬性都可賦值
}

 

StudentController

public function orm1(){

        echo "<pre>";
        // all 方法返回模型表的所有結果
//        $student_list = Student::all();
//        var_dump($student_list);


//        $student_list = Student::where('age','>',18)
//
//            ->orderBy('age','desc')
//            ->take(2)
//            ->get();
//        var_dump($student_list);


//        組塊結果集
//
//        如果你需要處理數據量很大的 Eloquent 結果集,可以使用 chunk 方法。chunk 方法會獲取一個指定數量的 Eloquent 模型“組塊”,並將其填充到給定閉包進行處理。使用 chunk 方法在處理大量數據集合時能夠有效減少內存消耗:

//        Student::chunk(2, function ($flights) {
//            foreach ($flights as $flight) {
//                //
//                if($flight->age > 15){
//                    var_dump($flight->age);
//                    return false;
//                }
//
//            }
//        });

       // 使用 find 和 first 獲取單個記錄。這些方法返回單個模型實例而不是模型集合:

        // 通過主鍵獲取模型...
//        $flight = Student::find(1);
//
//        // 獲取匹配查詢條件的第一個模型...
//        $flight = Student::where('age', 1)->first();
//
//        //還可以通過傳遞主鍵數組來調用 find 方法,這將會返回匹配記錄集合:
//
//        $flights = Student::find([1, 2, 3]);
//
//
//        //count、sum、max,以及其它查詢構建器提供的聚合函數。這些方法返回計算後的結果而不是整個模型實例:
//
//        $count = Student::where('age', 1)->count();
//        $max = Student::where('age', 1)->max('price');

        //新增

        //使用模型新增數據
//        $student = new Student();
//        $student->name = rand(1,999);
//        $student->age = rand(1,99);
//
//        $num = $student->save();
//        var_dump($num);

//        $student = Student::find(1022);
//        echo $student->created_at;
//        dd($student);

        //使用模型create方法
       $student = Student::create(['name'=>'ffds','age'=>14]);
       var_dump($student);
       其它創建方法

//        firstOrCreate 和 firstOrNew。firstOrCreate 方法先嚐試通過給定列/值對在數據庫中
查找記錄,
//        如果沒有找到的話則通過給定屬性創建一個新的記錄。
//
//firstOrNew 方法和 firstOrCreate 方法一樣先嚐試在數據庫中查找匹配的記錄,如果沒有找到,
//        則返回一個新的模型實例。需要注意的是,通過 firstOrNew 方法返回的模型實例並沒有持久化
到數據庫中,
//        你還需要調用 save 方法手動持久化
//        firstOrNew不會自動謝新紀錄,


//        $student = Student::firstOrCreate(['name'=>'888']);
//        echo $student->name;

//        $student = Student::firstOrNew(['name'=>'987']);
//        $student->save();
//        echo $student->name;

//        更新
//
//        save 方法還可以用於更新數據庫中已存在的模型。要更新一個模型,應該先獲取它,設置你想要更新的屬性,
//然後調用 save 方法。同樣,updated_at 時間戳會被自動更新,所以沒必要手動設置其值:
//
//        $student = Student::find(1003);
//       // dd($student);
//        $student->name = 'Ne44w';
//        $student->save();
//
//        批量更新
//
//        更新操作還可以同時修改給定查詢提供的多個模型實例,在本例中,所有有效且 destination=San Diego
// 的航班都被標記爲延遲:
//返回 更新條數
//       $num =   Student::where('age', '>', 18)
//            ->where('id', '>',1010)
//            ->update(['sex' => 1]);
//var_dump($num);
//        update 方法要求以數組形式傳遞鍵值對參數,代表着數據表中應該被更新的列。

//        如果模型已存在則更新,否則創建新模型的場景,Laravel 提供了一個 updateOrCreate 方法
來一步完成。
//和 firstOrCreate 方法一樣,updateOrCreate 方法會持久化模型,所以無需調用 save():

        //如果存在name== 'New' 的記錄,這更新age字段 爲99
        //如果不存在,折現建一條記錄 name=>New age=>99

//        $student = Student::updateOrCreate(
//            ['name' => 'New'],['age' => 99]
//        );
//        dd($student);

//        刪除模型
//
//        要刪除一個模型,調用模型實例上的 delete 方法:
        
//        $student = Student::find(1027);
//        $student->delete();
        
//        通過主鍵刪除模型
//        
//        在上面的例子中,我們在調用 delete 方法之前從數據庫中獲取該模型,不過,如果你知道模型的主鍵的話,
//可以調用 destroy 方法直接刪除而不需要獲取它:
        
//        Student::destroy(1026);
//        Student::destroy([1024,1025]);
//        Student::destroy(1023,1022);
        
//        通過查詢刪除模型
//        
//        當然,你還可以通過查詢刪除多個模型,在本例中,我們刪除所有被標記爲無效的航班:
        //返回影響 行數
//        $deletedRows = Student::where('id','>', 1008)->delete();
//var_dump($deletedRows);

//        軟刪除  使用步驟:
//
//        1、在表中增加字段deleted_at,用代碼添加:
//            Schema::table('flights', function ($table) { $table->softDeletes(); });
//        2、在Model中使用trait SoftDeletes
//        3、在Model中添加deleted_at到$dates成員變量

        //1、在每個文件裏運行下面代碼 添加字段 重複運行會報錯
//        Schema::table('student', function ($table) {
//            $table->softDeletes();
//        });
//        $student_list = Student::all();
//dd($student_list);
//        $student->delete();
//        var_dump($num);
    }

 

發佈了76 篇原創文章 · 獲贊 5 · 訪問量 9233
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章