Laravel Eloquent SoftDeletes

更新於 發佈於 閱讀時間約 3 分鐘
Laravel 提供了快速套用軟刪除的方法,直接在Model中加上use SoftDeletes即可:
use Illuminate\Database\Eloquent\SoftDeletes;
use SoftDeletes;
接著在程式中,假設要把文章1刪除,可以直接這樣寫:
Article::find(1)->delete();
不難發現,軟刪除其實就是壓上一個刪除時間,並不是真的把資料刪掉。
這邊需特別注意,使用軟刪除其實是會認table欄位deleted_at,因此記得table中要有這個欄位,才能正常運作。

還有一點要特別注意的是,使用軟刪除機制,這筆資料會被系統認為已經不存在了,所以在select的時候,預設不會把已經刪除的資料找出來,也就是deleted_at為空的才會被select出來。
另外,如果我再執行一次上述的Article::find(1)->delete(); 會發現有error:
Error: Call to a member function delete() on null
原因就是這筆已經被認為是刪除的資料,所以在find(1)的時候會找不到這筆,回傳null,所以才會有這個錯誤訊息。

那麼要怎麼找出被刪除的資料呢? 只要使用withTrashed()即可:
Article::withTrashed()->get()
這樣就會select出所有資料,包含被刪除的!

如果只想找出被刪除的,可以用onlyTrashed():
Article::onlyTrashed()->get();
所以上述改成這樣:
Article::onlyTrashed()->find(1)->delete();
//or
Article::withTrashed()->find(1)->delete();
就可以找的到第一筆文章了,也就不會再有錯誤,並且會把deleted_at時間再更新一次。

另外,在建migration的時候,若table有軟刪除需求,可以直接用這個方式建立軟刪除欄位:
$table->softDeletes()
建出來的table結構如下,其實softDeletes()就是新增一個deleted_at的timestamp欄位。
為什麼會看到廣告
avatar-img
21會員
161內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Vic Lin的沙龍 的其他內容
如上篇,使用Migration來做DB版本控制,但是會發現開發過程中若是要建立測試資料,要進DB一筆一筆手動新增或執行預先寫好的insert sql,其實有點麻煩,使用Laravel提供的Seeder功能,就可以解決這個問題。 指令如下,假設建立一個user table seeder:
在Laravel中除了用Validator來驗證資料,還可以用Form Request Validation,建立一個驗證class,在request進入controller之前,會先在這邊做驗證,若驗證失敗則不會繼續執行Controller。 建立form request: 範例程式碼:
資料情境: 每個產品有多種顏色,每種顏色屬於一個產品(一對多)。 程式碼: Product Model: 本筆記參考: 1. https://stackoverflow.com/questions/40468976/inserting-with-relationships-in-laravel
安裝設置: 安裝完成後,專案目錄結構如下: 執行$ npm run dev 可直接透過http://localhost:3000進入首頁,對應到pages/index.js。 Prod記得每次要先build再start: Example: SSG: 透過外部api取得資料建立靜態頁面 結論:
Laravel Migrate可以用來做資料庫版本控制,對開發團隊來說,可以快速修改Schema,了解每個工程師做了什麼change,比如新增、修改哪些欄位、表格等等,是非常實用的功能。 在開始之前,須先建立好DB,並設定好.env中的DB連線config。 建立migrate指令:
假設資料情境是「每位員工可能屬於多個部門,每個部門可能包含多位員工」,這種多對多的關係。 資料情境: 程式碼: 在Model中使用belongsToMany建立多對多關係,employee_department則為中間關聯表的table name。 列出所有員工,帶上對應的部門資料: 完整程式碼:
如上篇,使用Migration來做DB版本控制,但是會發現開發過程中若是要建立測試資料,要進DB一筆一筆手動新增或執行預先寫好的insert sql,其實有點麻煩,使用Laravel提供的Seeder功能,就可以解決這個問題。 指令如下,假設建立一個user table seeder:
在Laravel中除了用Validator來驗證資料,還可以用Form Request Validation,建立一個驗證class,在request進入controller之前,會先在這邊做驗證,若驗證失敗則不會繼續執行Controller。 建立form request: 範例程式碼:
資料情境: 每個產品有多種顏色,每種顏色屬於一個產品(一對多)。 程式碼: Product Model: 本筆記參考: 1. https://stackoverflow.com/questions/40468976/inserting-with-relationships-in-laravel
安裝設置: 安裝完成後,專案目錄結構如下: 執行$ npm run dev 可直接透過http://localhost:3000進入首頁,對應到pages/index.js。 Prod記得每次要先build再start: Example: SSG: 透過外部api取得資料建立靜態頁面 結論:
Laravel Migrate可以用來做資料庫版本控制,對開發團隊來說,可以快速修改Schema,了解每個工程師做了什麼change,比如新增、修改哪些欄位、表格等等,是非常實用的功能。 在開始之前,須先建立好DB,並設定好.env中的DB連線config。 建立migrate指令:
假設資料情境是「每位員工可能屬於多個部門,每個部門可能包含多位員工」,這種多對多的關係。 資料情境: 程式碼: 在Model中使用belongsToMany建立多對多關係,employee_department則為中間關聯表的table name。 列出所有員工,帶上對應的部門資料: 完整程式碼:
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文介紹瞭如何使用BAT腳本和CMD指令來自動執行檔案和空目錄的刪除作業。通過設定各種參數和指令,可以快速、有效地執行定期刪除作業,節省硬體空間並提升工作效率。
Thumbnail
每次丟垃圾時嘗試斷捨離無用也無愛的物品 從2023年1月開始我給自己新的內化計畫,就是要學著斷捨離。 -----要學著斷捨離這件事其實說起來太過籠統,所以我給自己的具體行動就是,每次倒垃圾時都丟掉一個並非新製造的垃圾,但實際上堆在那邊沒有用處也沒有愛的物件。 也就是說,把大方向轉成可以具體執行
Thumbnail
資料中如果有特定的內容需要移除,並且是有一定的規則,EXCEL會蠻多種解決方案。 用一個資料進行舉例: 這份資料中每個課程後面都有一個括號備註日期。 如何把括號中的日期快速刪除,分享幾種常見的方法 取代法 剖析法 CTRL+E法 函數法 【💡取代法】 選取資料範圍
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
從去年4月開始到現在,準備邁入斷捨離練習第12個月了!回顧幾年前實施過短暫斷捨離的自己,因為重新閱讀這本「一日丟一物的簡單生活提案」進而下定決心開始認真斷捨離。 現在已經養成一個習慣,只要看到要斷捨離的物品,就會拍照下來上傳IG寫紀錄。原先只是單純紀錄幾行文字,到後來使用固定書寫模式紀錄斷捨離的各
Thumbnail
碎紙機能銷毀、立可白可塗改、照片可以刪除,但一句對不起真的能夠什麼都沒有嗎? 都是暫時的吧。 這就是我不喜歡道歉的原因,因為再多對不起都無法改變事實,只是暫時降低罪惡感而已。 暫時遺忘、暫時寬恕、暫時放下,為的是讓自己喘口氣,在輪迴裡試著放過自己。 但時間
過去的事就讓它隨風飄去吧,往事隨風去,歲月淡無痕。
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
出現這個錯誤時,如何解決: Illuminate\Database\Eloquent\MassAssignmentException Add [name] to fillable property to allow mass assignment on [App\Models\XXXX]
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文介紹瞭如何使用BAT腳本和CMD指令來自動執行檔案和空目錄的刪除作業。通過設定各種參數和指令,可以快速、有效地執行定期刪除作業,節省硬體空間並提升工作效率。
Thumbnail
每次丟垃圾時嘗試斷捨離無用也無愛的物品 從2023年1月開始我給自己新的內化計畫,就是要學著斷捨離。 -----要學著斷捨離這件事其實說起來太過籠統,所以我給自己的具體行動就是,每次倒垃圾時都丟掉一個並非新製造的垃圾,但實際上堆在那邊沒有用處也沒有愛的物件。 也就是說,把大方向轉成可以具體執行
Thumbnail
資料中如果有特定的內容需要移除,並且是有一定的規則,EXCEL會蠻多種解決方案。 用一個資料進行舉例: 這份資料中每個課程後面都有一個括號備註日期。 如何把括號中的日期快速刪除,分享幾種常見的方法 取代法 剖析法 CTRL+E法 函數法 【💡取代法】 選取資料範圍
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
從去年4月開始到現在,準備邁入斷捨離練習第12個月了!回顧幾年前實施過短暫斷捨離的自己,因為重新閱讀這本「一日丟一物的簡單生活提案」進而下定決心開始認真斷捨離。 現在已經養成一個習慣,只要看到要斷捨離的物品,就會拍照下來上傳IG寫紀錄。原先只是單純紀錄幾行文字,到後來使用固定書寫模式紀錄斷捨離的各
Thumbnail
碎紙機能銷毀、立可白可塗改、照片可以刪除,但一句對不起真的能夠什麼都沒有嗎? 都是暫時的吧。 這就是我不喜歡道歉的原因,因為再多對不起都無法改變事實,只是暫時降低罪惡感而已。 暫時遺忘、暫時寬恕、暫時放下,為的是讓自己喘口氣,在輪迴裡試著放過自己。 但時間
過去的事就讓它隨風飄去吧,往事隨風去,歲月淡無痕。
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
出現這個錯誤時,如何解決: Illuminate\Database\Eloquent\MassAssignmentException Add [name] to fillable property to allow mass assignment on [App\Models\XXXX]