摘要:從而達到了軟刪除。不過,你可以通過在查詢中調(diào)用方法來強制查詢已被軟刪除的模型方法也可以被用在關聯(lián)查詢只取出軟刪除數(shù)據(jù)會只取出軟刪除數(shù)據(jù)恢復被軟刪除的模型有時候你可能希望取消刪除一個已被軟刪除的模型。
Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。
我個人一直比較推薦于在實際操作中學習,之前簡單了解了路由和Eloquent ORM的基本用法,今天我們繼續(xù)來學習它的其他用途,在深入了解Laravel 的 Eloquent ORM之前,我們先用他做一個簡單的分頁功能,完成上一章CURD中少了的分頁。
一、基于Eloquent ORM的分頁操作:
后臺分頁常見基本分兩種,一種是跳轉分頁,一種是ajax分頁。
我們上一章學習了,增刪改查,已經(jīng)有現(xiàn)成的數(shù)據(jù)表和控制器等,為了測試方便,我們再往數(shù)據(jù)表里面添加幾條數(shù)據(jù)。
添加后,我們只要修改NewsController控制器里的index方法即可來練習分頁操作。
此時我們先注釋掉第19行的代碼,打印18行,打開瀏覽器 127.0.0.1/comment 查看:
此時我們打印出來的數(shù)據(jù)除了表中的前五條數(shù)據(jù)以外,我們還傳遞過來了當前頁碼current_page,最后頁碼last_page,以及下一條頁碼url next_page_url,可以看出我們可以通過這種方式傳遞參數(shù)給API,進行跳轉分頁。
頁鏈接為http://127.0.0.1:9999/comment/?page=頁碼數(shù);即可實現(xiàn)分頁。
下面我們來看ajax分頁,Eqoluent ORM是一個很完美地數(shù)據(jù)庫應用層組件,依然提供了分頁所需要的各種參數(shù),以滿足參數(shù)傳值的分頁。
打開19行注釋,注釋掉18行,重新打印,可以發(fā)現(xiàn)打印出來的數(shù)據(jù)不變,此時我們改變控制器中
var_dump(News::paginate(5,["*"],"page",1)->toArray()); 改為
var_dump(News::paginate(5,["*"],"page",2)->toArray());
此時我們會發(fā)現(xiàn),請求到的數(shù)據(jù)已經(jīng)改變了,相應的其他參數(shù)也變成了第二頁的,所以如果需要ajax分頁時,只需要傳入相應頁碼參數(shù),即可獲取到該頁面數(shù)據(jù),可以結合搜索等條件限制。
二、軟刪除
1)實現(xiàn)軟連接
我們在上一章學習了刪除模型,通過在模型實例上調(diào)用 delete 方法:
News::find($id)->delete();
在上面的例子中,我們在調(diào)用 delete 方法之前會先從數(shù)據(jù)庫中取回模型。不過,如果你已知道了模型中的主鍵,則可以不用取回模型就能直接刪除它。若要直接刪除,請調(diào)用 destroy 方法:
News::destroy(1); News::destroy([1, 2, 3]);
除此之外呢,我們還可以通過查詢來刪除,前面為查詢條件,后面跟著的是delete();
除了從數(shù)據(jù)庫中移除實際記錄,Eloquent 也可以「軟刪除」模型。當模型被軟刪除時,它們并不會真的從數(shù)據(jù)庫中被移除。而是會在模型上設置一個 deleted_at 屬性并將其添加到數(shù)據(jù)庫。如果模型有一個非空值 deleted_at,代表模型已經(jīng)被軟刪除了。要在模型上啟動軟刪除,則必須在模型上使用 IlluminateDatabaseEloquentSoftDeletes trait 并添加 deleted_at 字段到你的 $dates 屬性上:
完成模型添加后,我們需要打開數(shù)據(jù)庫表,給表News里面添加一字段 deleted_at 類型 為 timestamp類型,此時當我們刪除數(shù)據(jù)的時候,會自動給表里該項數(shù)據(jù)這一個字段添加該段時間,等查詢的時候,會過濾掉這一項不為空的數(shù)據(jù)。從而達到了軟刪除。
要確認指定的模型實例是否已經(jīng)被軟刪除,可以使用 trashed 方法:
if ($news->trashed()) {
//}
查詢被軟刪除的模型#
包含被軟刪除的模型#如上所述,被軟刪除的模型將會自動從所有的查詢結果中排除。不過,你可以通過在查詢中調(diào)用 withTrashed 方法來強制查詢已被軟刪除的模型:
$news = AppNews::withTrashed()
->where("id", 1) ->get();withTrashed 方法也可以被用在 關聯(lián) 查詢:
$news->history()->withTrashed()->get();
只取出軟刪除數(shù)據(jù)#
onlyTrashed 會只取出軟刪除數(shù)據(jù):
$news = AppNews::onlyTrashed()
->where("id", 1) ->get();恢復被軟刪除的模型#
有時候你可能希望「取消刪除」一個已被軟刪除的模型。要恢復一個已被軟刪除的模型到有效狀態(tài),則可在模型實例上使用 restore 方法:
$news->restore();
你也可以在查詢上使用 restore 方法來快速地恢復多個模型:
AppNews::withTrashed()
->where("id", 1) ->restore();與 withTrashed 方法類似,restore 方法也可以被用在 關聯(lián) 查詢上:
$news->history()->restore();
永久地刪除模型#
有時候你可能需要真正地從數(shù)據(jù)庫移除模型。要永久地從數(shù)據(jù)庫移除一個已被軟刪除的模型,則可使用 forceDelete 方法:
// 強制刪除單個模型實例...
$news->forceDelete();// 強制刪除所有相關模型...
$news->history()->forceDelete();
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/31976.html
摘要:一路由目錄眾所周知,對于我們熟知的任何一款框架,例如路由系統(tǒng)都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無狀態(tài)的,并且被分配了中間件組。生成的控制器為每個行為保留了方法,同時還包括了處理動作和的聲明注釋。 一、路由目錄 眾所周知,對于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統(tǒng)都是極其重要的存在。 對于laravel框架也一樣,對于數(shù)據(jù)庫的操作,無非...
摘要:新增一篇新聞新增失敗輸入不符合要求請輸入標題請輸入內(nèi)容新增文章上面代碼中的是為了防攻擊的,每個表單都必須存在。 本文我將結合簡單例子,完成laravel框架下的增刪改查,希望會對大家有所幫助。在進行之前,大家應該保證自己的數(shù)據(jù)庫鏈接無誤,artisan命令能正常使用,路由鏈接無問題。 一、創(chuàng)建控制器、路由避免影響其他路由,我們先注釋掉之前聯(lián)系時編寫的所有路由。因為上一章我們已經(jīng)學會建立...
摘要:打開瀏覽器輸入,如無意外,將出現(xiàn)如下圖,表示框架安裝成功。四系統(tǒng)內(nèi)部后臺管理系統(tǒng)這個是框架自帶的后臺登錄管理系統(tǒng),只需要簡單的命令即可運行。出現(xiàn)上圖即為,創(chuàng)建模型成功。 在PHP個各種web開發(fā)框架中,laravel算是一款簡潔、優(yōu)雅的開發(fā)框架,本人也剛剛接觸到laravel,通過學習大神們的一些文章,下面是我的一些心得體會,希望可以給初學者一些幫助,大家一起進步。言歸正傳: 本人環(huán)境...
摘要:忽略該字段的映射省略創(chuàng)建數(shù)據(jù)訪問層接口,需要繼承,第一個泛型參數(shù)是實體對象的名稱,第二個是主鍵類型。 SpringBoot 是為了簡化 Spring 應用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關注業(yè)務本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 上一篇介紹了Spring JdbcTempl...
閱讀 3018·2021-09-03 10:33
閱讀 1176·2019-08-30 15:53
閱讀 2600·2019-08-30 15:45
閱讀 3362·2019-08-30 14:11
閱讀 514·2019-08-30 13:55
閱讀 2568·2019-08-29 15:24
閱讀 1879·2019-08-26 18:26
閱讀 3541·2019-08-26 13:41