laravel的模型

模型的作用:
就是一個快速操作數據庫(準確的說是對應的數據表,一個模型對應一個數據表)的方法,可以利用模型加上一些自己想要的操作對數據表進行快速操作。如查找特定的記錄,增刪查改都可。

模型的定義:
利用命令行快速創建一個模型:

php artisan make:model Post

這樣會創建在根目錄下的app下的model中:
在這裏插入圖片描述
在這裏插入圖片描述
模型對應的表名:默認是表名爲下劃線格式+複數(也可以利用覆蓋方法修改這個格式)
Eloquent 約定模型類映射表名是將類名由駝峯格式轉化爲小寫+下劃線(含多個單詞的話),最後將其轉化爲複數形式,比如 Post 對應表名是 posts、PostTag 對應表名是 post_tags 等等。當然,如果你不想遵循這個系統約定的規則,也可以通過手動設置模型類屬性的方式進行自定義,例如:

protected $table = ‘articles’;

模型除了表名的默認操作外還有其他默認定義:
【以下的PHP語句都是寫在模型類中的】
1、 默認數據表有一個自增型的id(int型)
可以通過類似語句修改id(列)的名稱:

protected $primaryKey = ‘post_id’;

如果主鍵不是自增的,還可以設置 $incrementing 屬性爲 false:

public $incrementing = false;

如果主鍵不是整型,還可以設置 $keyType 屬性爲 string:

protected $keyType = 'string';

2、 默認數據表都有兩個時間戳:
created_at 和 updated_at 字段(遷移類中 $table->timestamps() 會生成這兩個字段),並且在保存模型類時會自動維護這兩個字段。如果你的數據表裏面不包含這兩個字段,或者只包含一個,都需要設置 $timestamps 屬性爲 false:

public $timestamps = false;

或者通過 CREATED_AT 和 UPDATED_AT 常量來設置自定義的創建和更新時間字段:

public const CREATED_AT = 'create_time';
public const UPDATED_AT = 'update_time';

3、 默認的時間戳格式是Y-m-d H:i:s想要修改的話可以利用以下語句:

protected $dateFormat = ‘U’;

4、 默認的數據庫連接是配置中的默認連接如果想要修改的話可以利用以下的語句:

protected $connection = 'connection_name';

下面介紹利用模型進行增刪查改的功能:
一、 查詢
利用以下語句可以得到所有的記錄:

$posts = Post::all();

該方法返回的是集合,只不過是模型類集合:
在這裏插入圖片描述
要獲取指定模型類的字段屬性,遍歷該集合即可:

foreach ($posts as $post) {
    dump($post->title);
}

獲取指定查詢結果
如果想要指定查詢條件和查詢字段,可以通過 where 方法和 select 方法來實現:

$posts = Post::where(‘views’, ‘>’, 0)->select(‘id’, ‘title’,
‘content’)->get();

因爲是查詢構建器,所以我們還可以在模型查詢操作中對查詢結果進行排序和分頁:

$posts = Post::where('views', '>', 0)->orderBy('id', 'desc')->offset(10)->limit(5)->get();

獲取單條記錄
當然,你也可以通過查詢構建器的方式在模型類查詢中獲取單條記錄:

$user = User::where('name', '我是誰')->first();

二、 插入數據
利用如下語句插入數據:

$post = new App\Post;
$post->title = '測試文章標題';
$post->content = '測試文章內容';
$post->user_id = 1;
$post->save();

Eloquent 還爲我們提供了一些快捷的插入方法,比如 firstOrCreate 和 firstOrNew,這兩個方法都會先嚐試通過指定查詢條件在數據庫中查找對應記錄,如果沒有找到的話,會創建對應模型類的實例,並將查詢條件作爲對應字段值設置到模型屬性上
三、 更新數據

$post = Post::find(31);
$post->title = '測試文章標題更新';
$post->save();

Eloquent 也爲我們提供了快捷的更新方法 updateOrCreate,該方法首先會根據傳入參數對模型對應記錄進行更新,如果發現對應記錄不存在,則會將更新數據作爲初始數據插入數據庫,並保存(同樣也不建議這麼做,除非你的場景特別適合):

$user = user::updateOrCreate(
    ['name' => '我是誰'],
    ['email' => '[email protected]']
);

有的時候我們可能需要批量更新模型對應數據表的多條記錄,這可以藉助查詢構建器來實現:

Post::where('views', '>', 0)->update(['views' => 100]);

四、 刪除數據
刪除數據記錄語句實例如下:

$post = Post::find(31);
$post->delete();

destroy 方法一次刪除多條記錄,通過數組傳遞多個主鍵 ID 即可:Post::destroy([1,2,3]);
當然,也可以通過查詢構建器的方式刪除指定記錄:

$user = User::where('name', '我是誰')->fisrt();
$user->delete();
發佈了41 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章