您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Laravel中Eloquent ORM相關操作示例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
定義
操作
獲取(查詢)
獲取集合,(查詢列表)
返回值是 IlluminateDatabaseEloquentCollection 的一個實例
獲取所有的數據
use App\User; $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 = App\Flight::find([1, 2, 3]); 如果沒有任何查詢結果,IlluminateDatabaseEloquentModelNotFoundException 異常將會被拋出: $model = App\Flight::findOrFail(1); $model = App\Flight::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 屬性:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Flight extends Model { use SoftDeletes; // 應該被調整為日期的屬性,并添加 deleted_at 列到數據表 protected $dates = ['deleted_at']; } // Laravel Schema 構建器包含一個輔助函數來創建該數據列: Schema::table('flights', function ($table) { $table->softDeletes(); });
現在,當調用模型的 delete 方法時,deleted_at 列將被設置為當前日期和時間.
當查詢一個使用軟刪除的模型時,被軟刪除的模型將會自動從查詢結果中排除。
軟刪除的查詢
判斷給定模型實例是否被軟刪除,可以使用 trashed 方法:
if ($flight->trashed()) { // } // 如果你想要軟刪除模型出現在查詢結果中,可以使用 withTrashed 方法: $flights = App\Flight::withTrashed() ->where('account_id', 1) ->get(); // withTrashed 方法也可以用于關聯查詢中: $flight->history()->withTrashed()->get(); // onlyTrashed 方法只獲取軟刪除模型: $flights = App\Flight::onlyTrashed() ->where('airline_id', 1) ->get(); // 恢復軟刪除模型,使用restore 方法: $flight->restore(); // 快速恢復多個模型,同樣,這也不會觸發任何模型事件: App\Flight::withTrashed() ->where('airline_id', 1) ->restore(); // 也可以用于關聯查詢: $flight->history()->restore(); // 永久刪除模型,可以使用 forceDelete 方法: $flight->forceDelete(); // 強制刪除單個模型實例... $flight->history()->forceDelete(); // 強制刪除所有關聯模型...
關于“Laravel中Eloquent ORM相關操作示例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。