定義模型
默認規則是小寫的模型類名複數格式作爲與其對應的表名(除非在模型類中明確指定了其它名稱)。所以,在本例中,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);
}