Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。
我我的一直比較推薦於在實際操做中學習,以前簡單瞭解了路由和Eloquent ORM的基本用法,今天咱們繼續來學習它的其餘用途,在深刻了解Laravel 的 Eloquent ORM以前,咱們先用他作一個簡單的分頁功能,完成上一章CURD中少了的分頁。php
1、基於Eloquent ORM的分頁操做:ajax
後臺分頁常見基本分兩種,一種是跳轉分頁,一種是ajax分頁。
咱們上一章學習了,增刪改查,已經有現成的數據表和控制器等,爲了測試方便,咱們再往數據表裏面添加幾條數據。數據庫
添加後,咱們只要修改NewsController控制器裏的index方法便可來練習分頁操做。瀏覽器
此時咱們先註釋掉第19行的代碼,打印18行,打開瀏覽器 127.0.0.1/comment 查看:學習
此時咱們打印出來的數據除了表中的前五條數據之外,咱們還傳遞過來了當前頁碼current_page,最後頁碼last_page,以及下一條頁碼url next_page_url,能夠看出咱們能夠經過這種方式傳遞參數給API,進行跳轉分頁。
頁連接爲http://127.0.0.1:9999/comment/?page=頁碼數;便可實現分頁。測試
下面咱們來看ajax分頁,Eqoluent ORM是一個很完美地數據庫應用層組件,依然提供了分頁所須要的各類參數,以知足參數傳值的分頁。
打開19行註釋,註釋掉18行,從新打印,能夠發現打印出來的數據不變,此時咱們改變控制器中
var_dump(News::paginate(5,['*'],'page',1)->toArray()); 改成
var_dump(News::paginate(5,['*'],'page',2)->toArray());
此時咱們會發現,請求到的數據已經改變了,相應的其餘參數也變成了第二頁的,因此若是須要ajax分頁時,只須要傳入相應頁碼參數,便可獲取到該頁面數據,能夠結合搜索等條件限制。url
2、軟刪除spa
1)實現軟鏈接
咱們在上一章學習了刪除模型,經過在模型實例上調用 delete 方法:rest
News::find($id)->delete();
在上面的例子中,咱們在調用 delete 方法以前會先從數據庫中取回模型。不過,若是你已知道了模型中的主鍵,則能夠不用取回模型就能直接刪除它。若要直接刪除,請調用 destroy 方法:code
News::destroy(1); News::destroy([1, 2, 3]);
除此以外呢,咱們還能夠經過查詢來刪除,前面爲查詢條件,後面跟着的是delete();
除了從數據庫中移除實際記錄,Eloquent 也能夠「軟刪除」模型。當模型被軟刪除時,它們並不會真的從數據庫中被移除。而是會在模型上設置一個 deleted_at 屬性並將其添加到數據庫。若是模型有一個非空值 deleted_at,表明模型已經被軟刪除了。要在模型上啓動軟刪除,則必須在模型上使用 IlluminateDatabaseEloquentSoftDeletes trait 並添加 deleted_at 字段到你的 $dates 屬性上:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class News extends Model { use SoftDeletes; /** * 須要被轉換成日期的屬性。 * * @var array */ protected $dates = ['deleted_at']; }
完成模型添加後,咱們須要打開數據庫表,給表News裏面添加一字段 deleted_at 類型 爲 timestamp類型,此時當咱們刪除數據的時候,會自動給表裏該項數據這一個字段添加該段時間,等查詢的時候,會過濾掉這一項不爲空的數據。從而達到了軟刪除。
要確認指定的模型實例是否已經被軟刪除,可使用 trashed 方法:
if ($news->trashed()) {
//
}
查詢被軟刪除的模型#
包含被軟刪除的模型#
如上所述,被軟刪除的模型將會自動從全部的查詢結果中排除。不過,你能夠經過在查詢中調用 withTrashed 方法來強制查詢已被軟刪除的模型:
$news = AppNews::withTrashed()
->where('id', 1) ->get();
withTrashed 方法也能夠被用在 關聯 查詢:
$news->history()->withTrashed()->get();
只取出軟刪除數據#
onlyTrashed 會只取出軟刪除數據:
$news = AppNews::onlyTrashed()
->where('id', 1) ->get();
恢復被軟刪除的模型#
有時候你可能但願「取消刪除」一個已被軟刪除的模型。要恢復一個已被軟刪除的模型到有效狀態,則可在模型實例上使用 restore 方法:
$news->restore();
你也能夠在查詢上使用 restore 方法來快速地恢復多個模型:
AppNews::withTrashed()
->where('id', 1) ->restore();
與 withTrashed 方法相似,restore 方法也能夠被用在 關聯 查詢上:
$news->history()->restore();
永久地刪除模型#
有時候你可能須要真正地從數據庫移除模型。要永久地從數據庫移除一個已被軟刪除的模型,則可以使用 forceDelete 方法:
// 強制刪除單個模型實例...
$news->forceDelete();
// 強制刪除全部相關模型...$news->history()->forceDelete();