ORM模型簡介
阿新 • • 發佈:2017-05-22
artisan 傳送門 可用 func public end 自己的 對象關系 如果
1.1創建model模型
1>模型通常放在 app 目錄中,不過你可以將他們隨意放在任何可通過 composer.json 自動加載的地方。(我們建議在app下建立models文件夾)
2>所有的 Eloquent 模型都繼承自 Illuminate\Database\Eloquent\Model 類。
3>創建模型實例的最簡單方法是使用 make:model artisan命令
php artisan make:model Flight
4>然後將文件移動到models文件夾下,再更改下命名空間
1.2模型約定
主要是以下幾個方面:表名,主鍵,時間,日期格式,數據庫
分別解釋上面的定義:
1>除非數據表明確地指定了其它名稱,否則將使用類的「蛇形名稱」、復數形式名稱來作為數據表的名稱。例子中,Eloquent 將會假設 Flight 模型被存儲記錄在 flights 數據表中
2>Eloquent 也會假設每個數據表都有一個叫做 id 的主鍵字段。你也可以定義一個 $primaryKey 屬性來重寫這個約定。
3>默認情況下,Eloquent 會預計你的數據表中有 created_at 和 updated_at 字段。如果你不希望讓 Eloquent 來自動維護這兩個字段,可在模型內將 $timestamps 屬性設置為 false:
4>如果你需要自定義自己的時間戳格式,可在模型內設置 $dateFormat 屬性。這個屬性決定了日期應如何在數據庫中存儲,以及當模型被序列化成數組或 JSON 時的格式:
5>默認情況下,所有的 Eloquent 模型會使用應用程序中默認的數據庫連接設置。如果你想為模型指定不同的連接,可以使用 $connection 屬性:
1>基本添加,save方法
返回值:true或者false
ORM模型簡介
1>什麽是ORM? ORM,即 Object-Relational Mapping(對象關系映射),它的作用是在關系型數據庫和業務實體對象之間作一個映射,這樣,我們在操作具體的 業務對象時,就不需要再去和復雜的SQL語句打交道,只需簡單的操作對象的屬性和方法即可。 2>ORM 兩種最常見的實現方式是 ActiveRecord 和 DataMapper, ActiveRecord(非常流行) 中模型與數據表一一對應, DataMapper 中模型與數據表是完全分離的。 3>Eloquent ORM 使用 ActiveRecord 實現方式,每一個 Eloquent 模型類對應著數據庫中的一張表,我們通過調用模型類的相應方法實現對數據庫的增刪改查。一.定義模型
class Flight extends Model { /** * 與模型關聯的數據表。 */ protected $table = ‘my_flights‘; /** * 指定主鍵。 */ public $primaryKey = ‘id‘; /** * 指定是否模型應該被戳記時間。 */ public $timestamps = false; /** * 模型的日期字段保存格式。 */ protected $dateFormat = ‘U‘; /** * 此模型的連接名稱。 */ protected $connection = ‘connection-name‘; }
二.添加模型(增)
//首先創建一個新模型實例 $flight = new Flight; //給這個模型添加屬性 $flight->name = $name; $flight->length = $length; //... 其它更多屬性 $flight->save();此時created_at 以及 updated_at 時間戳將會被自動設置 2>批量賦值,create方法 返回值:Eloquent 模型實例 批量賦值就是我們不必像前面那樣一個個定義模型屬性,我們可以傳遞一個數組給模型類(這個數組通常是表單)
$flight = Flight ::create(Input::all());這個方法有個前提條件,出於安全考慮,我們需要在model中設置黑名單(不可以被賦值的屬性 protected $guarded = [‘price‘])或者白名單(可以被賦值的屬性 protected $fillable = [‘name‘]),如果不設置的話會報錯 註意:如果設置了protected $guarded = [‘price‘]
$input = [ ‘name‘=>‘test‘, ‘content‘=>‘testflight‘, ‘length‘=>2000, // ‘price‘=>1880, 即使這裏寫了價格,因為是受保護的,調用下面的create,也不會插入成功3>如果想要批量插入數據 返回值:true或者false
]; $flight = Flight ::create($input); //如果想成功,那麽就重新定義一下屬性,然後調用save方法 $flight ->price= 200;
$flight ->save();
//$data是可以是二維數組 Flight::insert($data)4>另外兩個方法 // 用屬性取回航班,當結果不存在時創建它... 返回值是Eloquent 模型實例
$flight = App\Flight::firstOrCreate([‘name‘ => ‘Flight 10‘]);// 用屬性取回航班,當結果不存在時實例化一個新實例,此時尚未存入數據庫,可以使用save方法存儲
$flight = App\Flight::firstOrNew([‘name‘ => ‘Flight 10‘]); $flight->save(); //存入到數據庫
三.刪除模型(刪)
1>要刪除模型,在模型實例上調用 delete 方法: 返回值是true或者false$flight = App\Flight::find(1); //先從是數據庫中取回數據 $flight->delete(); //實現刪除2>如果你知道模型的主鍵,可以不取回模型,直接刪除 返回值是被刪除記錄數
App\Flight::destroy(1); App\Flight::destroy([1, 2, 3]); App\Flight::destroy(1, 2, 3);3>通過查找來刪除 返回值是刪除條數
$deletedRows = App\Flight::where(‘active‘, 0)->delete();
四.更新模型(改)
1>使用save方法 返回值:true或者false$flight = App\Flight::find(1); $flight->name = ‘New Flight Name‘; $flight->save();2>使用update方法,同樣要用到批量賦值(黑名單和白名單也起作用) 返回值:返回更新的條數
App\Flight::where(‘active‘, 1) ->where(‘destination‘, ‘San Diego‘) ->update([‘delayed‘ => 1]);五.取回模型(查) 1>取回多個模型 每個 Eloquent 模型想像成強大的查詢構造器,它讓你可以流暢地查找與模型關聯的數據表,可以通過相對應的屬性來訪問模型的字段值。
$flights = Flight::all();可以增加限制
//我們遍歷查找每個返回的flight實例,並且輸出每個實例的name字段 foreach ($flights as $flight) { echo $flight->name; }
$flights = App\Flight::where(‘active‘, 1) ->orderBy(‘name‘, ‘desc‘) ->take(10) ->get();分塊結果
Flight::chunk(200, function ($flights) {總結: <1>all和get等方法返回一個
foreach ($flights as $flight) {
//
}
});
Illuminate\Database\Eloquent\Collection
實例,這個實例中包含多個Eloquent 模型,Collection
類提供多種輔助函數來處理 Eloquent 結果。我們也可以簡單地像數組一樣來遍歷集合:
<2>Eloquent 模型是查詢構造器,因此你應當去閱讀所有查詢構造器中可用的方法。你可在 Eloquent 查找中使用這其中的任何方法。
2>取回單個模型
這些方法返回的是單個模型的實例,而不是返回模型的集合:
$flight = App\Flight::find(1); // 通過主鍵取回一個模型... $flight = App\Flight::where(‘active‘, 1)->first(); // 取回符合查找限制的第一個模型 ... $model = App\Flight::findOrFail(1); //找不到模型時拋出一個異常 $model = App\Flight::where(‘legs‘, ‘>‘, 100)->firstOrFail();3>其他一些連貫操作 使用 count、sum、max,和其它查詢構造器提供的集合函數。這些方法會返回適當的標量值,而不是一個完整的模型實例:
$count = App\Flight::where(‘active‘, 1)->count();
$max = App\Flight::where(‘active‘, 1)->max(‘price‘);
關於返回值的實際操作傳送門:laravel框架之返回值
ORM模型簡介