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