回歸基礎面談談怎麼開資料庫
還有 Laravel 怎麼和資料庫溝通
實務上使用關連式資料庫至少要做到
第一正規劃 (1NF)
具有高度彈性,你可以寫出一些很奇葩的 query
但是太像義大利麵
江湖有句話:DB一時爽,維護火葬場
還有另一個方法 guarded
和 fillable 相反,guarded 代表黑名單
這些欄位不能被寫入
除此之外還有支援很多不同的 attribute
像是 primaryKey, incrementing 等等
可以到這邊看,看看 Collection.php 和 Model.php 沒有有造好的輪子
而在 sql 中我們需要面積來計算
但是開一個欄位儲存面積又太浪費了
於是我們就產生一個 Virtual Attribute 作為面積
這是一個虛擬的屬性,不是資料庫中的欄位
但是又是一個欄位
以上就是這次的筆記
還有 Laravel 怎麼和資料庫溝通
實務上使用關連式資料庫至少要做到
第一正規劃 (1NF)
- 必須要有主鍵,並且欄位相依於主鍵
- 每個欄位只有唯一值
- 沒有一列資料是完全重複
其他2NF, 3NF有興趣的就自己研究
我也要找時間翻書複習了,如果有什麼頓悟或是心得可能會更新上來
我也要找時間翻書複習了,如果有什麼頓悟或是心得可能會更新上來
再來看看 Laravel 怎麼溝通資料庫?
主要有兩種model,DB和Model(Eloquent)
DB
- 輕量化的class
- 同時支援raw sql以及eloquent style
- 沒有model event
// eloquent mode
DB::table('users')->where('id', 1)->update('name', '城武');
// sql mode
DB::update("UPDATE users SET name='城武' WHERE id=1");
具有高度彈性,你可以寫出一些很奇葩的 query
但是太像義大利麵
江湖有句話:DB一時爽,維護火葬場
Model(Eloquent)
又稱作 class Model
當然也可以在 create 方法直接塞入 json
但是此時所有 json 資料都會被儲存,如果使用者壞壞輸入惡意字元...
解決方法:
這些欄位進來才會被允許
- ActiveRecord style (Ruby On Rails)
- 語意比較明確
- Virtual Attribute
再來看看使用 class Model 實際怎麼操作資料庫
// 新增user,名字為
城武App\User::create(['name' => '城武']);
// 刪除ID為1的use
sql modeApp\User::where('id', 1)->delete();
Laravel Eloquent 提供了很多方便的語法當然也可以在 create 方法直接塞入 json
但是此時所有 json 資料都會被儲存,如果使用者壞壞輸入惡意字元...
解決方法:
批量賦值
fillable 屬性指定了可以被批量賦值的欄位這些欄位進來才會被允許
protected $fillable = ['first_name', 'last_name', 'email'];
還有另一個方法 guarded
和 fillable 相反,guarded 代表黑名單
這些欄位不能被寫入
protected $guarded = ['id', 'password'];
除此之外還有支援很多不同的 attribute
像是 primaryKey, incrementing 等等
可以到這邊看,看看 Collection.php 和 Model.php 沒有有造好的輪子
Virtual Attribute
用實際的例子來說,我們資料庫儲存了長、寬而在 sql 中我們需要面積來計算
但是開一個欄位儲存面積又太浪費了
於是我們就產生一個 Virtual Attribute 作為面積
這是一個虛擬的屬性,不是資料庫中的欄位
但是又是一個欄位
以上就是這次的筆記
留言
張貼留言