成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【整理】Laravel 中Eloquent ORM 相關(guān)操作

dongfangyiyu / 1989人閱讀

摘要:軟刪除當(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)文章

  • 整理LaravelEloquent ORM 關(guān)聯(lián)關(guān)系的操作

    摘要:從屬關(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ì)一

    bovenson 評(píng)論0 收藏0
  • windows下laravel5.5手寫(xiě)教程2路由Eloquent ORM操作(適合初學(xué)者)

    摘要:一路由目錄眾所周知,對(duì)于我們熟知的任何一款框架,例如路由系統(tǒng)都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無(wú)狀態(tài)的,并且被分配了中間件組。生成的控制器為每個(gè)行為保留了方法,同時(shí)還包括了處理動(dòng)作和的聲明注釋。 一、路由目錄 眾所周知,對(duì)于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統(tǒng)都是極其重要的存在。 對(duì)于laravel框架也一樣,對(duì)于數(shù)據(jù)庫(kù)的操作,無(wú)非...

    BlackFlagBin 評(píng)論0 收藏0
  • LaravelLaravel 框架關(guān)鍵技術(shù)解析·讀書(shū)筆記(一)

    摘要:判斷是否存在構(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...

    CocoaChina 評(píng)論0 收藏0
  • laravel5.5手寫(xiě)教程4Eloquent ORM分頁(yè)及軟刪除

    摘要:從而達(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的基本用法,今天...

    mindwind 評(píng)論0 收藏0
  • laravel 數(shù)據(jù)遷移與 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ù)遷移管...

    tulayang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<