摘要:軟刪除當模型被軟刪除后,它們并沒有真的從數據庫刪除,而是在模型上設置一個屬性并插入數據庫,如果模型有一個非空值,那么該模型已經被軟刪除了。
Laravel 中Eloquent ORM 相關操作 定義 操作 獲取(查詢) 獲取集合,(查詢列表)
</>復制代碼
返回值是 IlluminateDatabaseEloquentCollection 的一個實例
獲取所有的數據
</>復制代碼
use AppUser;
$users = User::all();
條件獲取列表
</>復制代碼
$users = User::where("active", 1)
->orderBy("name", "desc")
->take(10)
->get();
獲取數據列值
</>復制代碼
$result = User::where("gender", "1")->pluck("name");
// 返回 ["name1","name2 "]
// 該自定義鍵必須是該表的其它字段列名,否則會報錯
$result = User::where("gender", "1")->pluck("email","name");
// 返回 {"name1":"ed9@qq.com","name2":"ed89@qq.com"}
獲取單個模型,(查詢單條數據)
</>復制代碼
// 通過主鍵獲取模型
$user = User::find(1);
// 獲取匹配查詢條件的第一個模型...
$user = User::where("active", 1)->first();
// 返回第一個gender為1的用戶的名字
$name = User::where("gender", "1")->value("name");
// 傳遞主鍵數組來調用 find 方法,這將會返回匹配記錄集合:
$users = AppFlight::find([1, 2, 3]);
</>復制代碼
如果沒有任何查詢結果,IlluminateDatabaseEloquentModelNotFoundException 異常將會被拋出:
</>復制代碼
$model = AppFlight::findOrFail(1);
$model = AppFlight::where("legs", ">", 100)->firstOrFail();
處理結果集
</>復制代碼
$result = User::where("gender", "1")->chunk(5, function($users) {
foreach ($users as $user) {
$name = $user->name;
echo $name;
}
}) // 輸出名字
// result 為 boolean
$result = User::where("gender", "1")->chunk(5, function($users) {
foreach ($users as $user) {
$name = $user->name;
if ($name == "dxx5") {
echo $name;
return false;
}
}
}) // 找出某個名字
聚合方法
</>復制代碼
// 獲取總數
$count = Flight::where("active", 1)->count();
// 獲取最大值
$max = Flight::where("active", 1)->max("price");
//平均值
$max = Flight::where("active", 1)->avg("price");
條件查詢
select查詢
</>復制代碼
// 查詢名字和email
$users = User::select("name","email as user_email")->get();
// 返回 [{"name":"name1","user_email":"1@qq.com"}]
// 查詢構建器實例,添加一個查詢列到已存在的 select 子句
$user = User::select("name");
$users = $user->addSelect("gender")->get();
聯合
</>復制代碼
$first = DB::table("users")
->whereNull("first_name");
$users = DB::table("users")
->whereNull("last_name")
->union($first)
->get();
注:unionAll 方法也是有效的,并且和 union 有同樣的使用方式
Where子句
</>復制代碼
$users = User::where("gender", "=", 1)->get(); // 男性用戶
$users = User::where("gender", 1)->get(); // 同上
$users = User::where("age", ">=", 10)->get(); // 10歲以上用戶
$users = User::where("age", "<>", 10)->get(); // 非10歲用戶
$users = User::where("name", "like", "d%")->get(); // 名字為d開頭的用戶
$users = User::where("name", "like", "%d%")->get(); // 名字含d的用戶
// 傳遞條件數組到 where 函數:
$users = User::where([["gender", "=", "1"],["age", ">", "10"]])->get(); //10歲以上的男孩
// or語句
$users = User::where("gender", "=", 1)->orWhere("age", ">", "10")->get();
其他where語句
</>復制代碼
// whereBetween 方法驗證列值是否在給定值之間:
$users = User::whereBetween("age", [1, 7])->get(); // 1-7歲的用戶
// whereNotBetween 方法驗證列值不在給定值之間:
$users = User::whereNotBetween("age", [1, 7])->get(); // 1-7歲以外的用戶
// whereIn 方法驗證給定列的值是否在給定數組中:
$users = User::whereIn("id", [1, 2, 3])->get();
// whereNotIn 方法驗證給定列的值不在給定數組中:
$users = User::whereNotIn("id", [1, 2, 3])->get();
// whereNull 方法驗證給定列的值為NULL:
$users = User::whereNull("updated_at")->get();
// whereNotNull 方法驗證給定列的值不是 NULL:
$users = User::whereNotNull("updated_at")->get();
// whereDate 方法用于比較字段值和日期:
$users = User::whereDate("created_at", "2018-05-10")->get(); // 20180510注冊的用戶
// whereMonth 方法用于比較字段值和一年中的指定月份:
$users = User::whereMonth("created_at", "10")->get();
// whereDay 方法用于比較字段值和一月中的制定天:
$users = User::whereDay("created_at", "10")->get();
whereYear 方法用于比較字段值和指定年:
$users = User::whereYear("created_at", "2016")->get();
// whereColumn 方法用于驗證兩個字段是否相等,也可以傳遞一個比較運算符到該方法:
$users = User::whereColumn("first_name", "last_name")->get();
$users = User::whereColumn("updated_at", ">", "created_at")->get();
// 還可以傳遞多條件數組到 whereColumn 方法,這些條件通過 and 操作符進行連接:
$users = User::whereColumn([
["first_name", "=", "last_name"],
["updated_at", ">", "created_at"]
])->get();
參數分組
</>復制代碼
$users = User::where("name", "=", "xxx")
->orWhere(function ($query) {
$query->where("age", ">", 5)
->where("gender", 1);
})
->get(); // xxx或大于5歲的男孩
where exit
</>復制代碼
$users = User::whereExists(function ($query) {
$query->select(DB::raw(1))
->from("articles")
->whereRaw("articles.user_id = users.id");
})->get(); // 寫過文章的用戶
排序
</>復制代碼
$users = User::orderBy("age", "desc")->get(); // 年齡倒序
$user = User::latest()->first(); //crate_at 最晚的那個
$user = User::oldest()->first(); //crate_at 最早的那個
$users = User::inRandomOrder()->first(); // 隨機用戶
限定
</>復制代碼
$users = User::skip(2)->take(3)->get(); // 跳過前2個取中間3個
$users = User::offset(2)->limit(3)->get(); // 同上
分組
</>復制代碼
$users = User::groupBy("name")->having("age", ">", 10)->get(); // 大于10的用戶
// 找到所有售價大于 $2,500 的部分, 沒理解
$users = User::select("department", DB::raw("SUM(price) as total_sales"))
->groupBy("department")
->havingRaw("SUM(price) > 2500")
->get();
when 條件子句
</>復制代碼
$sortBy = null; // 當sortBy為null,默認name排序
$users = User::when($sortBy,
function ($query) use ($sortBy) {
return $query->orderBy($sortBy);
}, function ($query) {
return $query->orderBy("name");
})
->get();
分頁
</>復制代碼
$users = User::paginate(3);
$users->appends(["sort" => "name"])->links(); // 修改的是連接
$users->withPath("custom/url");
// 約束條件
$users = User::where("id", ">", 2)->paginate(2);
$users = User::where("id", ">", 2)->simplePaginate(2);
return $users->toArray();
返回結果:
</>復制代碼
當調用 paginate 方法時,你將獲取IlluminatePaginationLengthAwarePaginator 實例,
調用方法simplePaginate 時,將會獲取 IlluminatePaginationPaginator 實例。(不需要知道結果集中數據項的總數)
</>復制代碼
{
"current_page" : 1
"data": [{"id":1,"name":"name1"},{"id":2,"name":"name2"}]
"from":1
"last_page":2
"next_page_url":"http://localhost:8888/user/page?page=2"
"path":"http://localhost:8888/user/page"
"per_page":3
"prev_page_url":null
"to":3
"total":6
}
每個分頁器實例都可以通過以下方法提供更多分頁信息:
插入</>復制代碼
$results->count()
$results->currentPage()
$results->firstItem()
$results->hasMorePages()
$results->lastItem()
$results->lastPage() (使用simplePaginate 時無效)
$results->nextPageUrl()
$results->perPage()
$results->previousPageUrl()
$results->total() (使用simplePaginate 時無效)
$results->url($page)
插入
</>復制代碼
$user = new User;
$user->name = "username";
$user->fill(["grade" => "2"]); // 使用 fill 方法通過數組屬性來填充
$user->save();
$row = array("name" => str_random(3),"email" => str_random(3)."@qq.com")
$user = User::create($row); // 返回模型對象
$id = User::insertGetId($row); // 插入記錄并返回ID值
$success = User::nsert([
["email" => "taylor@example.com", "votes" => 0],
["email" => "dayle@example.com", "votes" => 0]
]); // 插入多條
更新
單個更新
</>復制代碼
$user = User::find(1);
$user->name = "new name";
$user->save();
批量更新
</>復制代碼
User::where("gender", 1)->update(["age" => 1]);
自增自減
</>復制代碼
$result = User::increment("age"); // 返回修改的行數
$result = User::increment("age", 2);
$result = User::decrement("age");
$result = User::decrement("age", 2);
$result = User::increment("age",1,["gender" => 1]); // 年齡自增1 且 性別改為1
其他創建方法
</>復制代碼
$user = User::firstOrCreate(["name" => "Flight 10"]); // 不存在則創建
$user = User::firstOrNew(["name" => "Flight 10"]); // 如果不存在初始化一個新的實$user = User::updateOrCreate(
["name" => "username", "age" => "16"],
["grade" => 3]
); // 將 16歲的username 改成3年級,沒有則創建
刪除
</>復制代碼
$user = User::find(1);
$user->delete(); // 通過主鍵查詢后,刪除模型
User::destroy(1); // 直接通過主鍵刪除
User::destroy([1, 2, 3]);
User::destroy(1, 2, 3);
$deletedRows = User::where("age", 0)->delete(); //查詢 刪除
// 注:通過 Eloquent 批量刪除時,deleting 和 deleted 事件不會被觸發,因為在進行模型刪除時不會獲取模型。
軟刪除
</>復制代碼
當模型被軟刪除后,它們并沒有真的從數據庫刪除,而是在模型上設置一個 deleted_at 屬性并插入數據庫,如果模型有一個非空 deleted_at 值,那么該模型已經被軟刪除了。啟用模型的軟刪除功能,可以使用模型上的IlluminateDatabaseEloquentSoftDeletes trait并添加 deleted_at 列到 $dates 屬性:
</>復制代碼
softDeletes();
});
現在,當調用模型的 delete 方法時,deleted_at 列將被設置為當前日期和時間.
當查詢一個使用軟刪除的模型時,被軟刪除的模型將會自動從查詢結果中排除。
軟刪除的查詢
</>復制代碼
判斷給定模型實例是否被軟刪除,可以使用 trashed 方法:
if ($flight->trashed()) {
//
}
// 如果你想要軟刪除模型出現在查詢結果中,可以使用 withTrashed 方法:
$flights = AppFlight::withTrashed()
->where("account_id", 1)
->get();
// withTrashed 方法也可以用于關聯查詢中:
$flight->history()->withTrashed()->get();
// onlyTrashed 方法只獲取軟刪除模型:
$flights = AppFlight::onlyTrashed()
->where("airline_id", 1)
->get();
// 恢復軟刪除模型,使用restore 方法:
$flight->restore();
// 快速恢復多個模型,同樣,這也不會觸發任何模型事件:
AppFlight::withTrashed()
->where("airline_id", 1)
->restore();
// 也可以用于關聯查詢:
$flight->history()->restore();
// 永久刪除模型,可以使用 forceDelete 方法:
$flight->forceDelete(); // 強制刪除單個模型實例...
$flight->history()->forceDelete(); // 強制刪除所有關聯模型...
關于查詢作用域,模型事件,查看移步官網文檔
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30781.html
摘要:從屬關聯關系更新關聯使用方法,該方法會在子模型設置外鍵移除關聯的時候,使用方法。使得這項操作變得簡單,只需要添加包含關聯關系名稱的屬性到子模型即可觸發的所有關聯關系關聯關系更新時,所屬模型將也會更新其值 Laravel中Eloquent ORM 關聯關系的操作 關聯數據 定義關聯關系 一對一
摘要:一路由目錄眾所周知,對于我們熟知的任何一款框架,例如路由系統都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無狀態的,并且被分配了中間件組。生成的控制器為每個行為保留了方法,同時還包括了處理動作和的聲明注釋。 一、路由目錄 眾所周知,對于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統都是極其重要的存在。 對于laravel框架也一樣,對于數據庫的操作,無非...
摘要:判斷是否存在構造函數,不存在直接實例化,存在則通過來獲取輸入函數,并有相應的方法解決依賴參數問題,實現依賴注入。 Laravel 框架關鍵技術解析·讀書筆記(一) 第一章 入口文件 請求訪問的入口文件,主要完成幾部分工作,分別是: 自動加載函數的添加 服務器實例化與服務注冊 路由加載 請求實例化與路由分發 相應生成與發送 其中,自動加載函數用于包含引用文件,改文件是composer...
摘要:從而達到了軟刪除。不過,你可以通過在查詢中調用方法來強制查詢已被軟刪除的模型方法也可以被用在關聯查詢只取出軟刪除數據會只取出軟刪除數據恢復被軟刪除的模型有時候你可能希望取消刪除一個已被軟刪除的模型。 Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。我個人一直比較推薦于在實際操作中學習,之前簡單了解了路由和Eloquent ORM的基本用法,今天...
摘要:同時使用數據遷移管理數據庫,可以與團隊進行共享以及編輯。實際項目根據需求進行記錄,以及選擇存儲方式。使用命令可以很方便的創建模型以及數據遷移。,參數在創建模型的同時也創建了數據遷移文件。參考資料數據庫操作遷移快速入門。 導語 數據庫可以說是后端開發最常用,也是最重要的部分。laravel 提供了很實用的 Eloquent ORM 模型類,簡單、直觀的與數據庫進行交互。同時使用數據遷移管...
閱讀 3693·2021-11-25 09:43
閱讀 2653·2021-11-25 09:43
閱讀 3851·2021-11-24 09:38
閱讀 702·2021-11-18 10:02
閱讀 2243·2021-09-22 15:53
閱讀 3002·2019-08-30 15:44
閱讀 2779·2019-08-30 14:01
閱讀 2762·2019-08-29 15:15