laravel鏈式操作
$deleted = DB::delete('delete from users');返回值:刪除的行數將會被返回 2.3改->
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);返回值:該方法會返回此宣告所影響的行數 2.4查->
$users = DB::select('select * from users where active = ?', [1]);返回值:方法總會返回結果的陣列資料。陣列中的每個結果都是一個 PHP StdClass 物件,這使你能夠訪問到結果的值: 訪問方法:
foreach2.5事務處理-> //自動($users as $user) { echo $user->name; }
DB::transaction(function () { DB::table('users')->update(['votes' => 1]); DB::table('posts')->delete(); });//手動(可配合try catch使用)
DB::beginTransaction(); if($someContion){ DB::rollback(); return2.6有時候一些資料庫操作不應該返回任何引數。對於這種型別的操作,你可以在 DB facade 使用 statement 方法:false; } DB::commit();
DB::statement('drop table users');
3 查詢構造器
為什麼要使用查詢構造器? 1>因為資料庫查詢構造器提供了方便、流暢的介面,我們不需要再寫原生的sql語句,通過查詢構造器提供給我們的各種方法來建立及執行資料庫查詢。這能夠滿足我們大部分需要,且能在所有被支援的資料庫系統中使用。 2>Laravel 的查詢構造器使用 PDO 引數繫結,以保護你的應用程式不受資料庫注入攻擊。在傳入字串作為繫結前不需要先清理它們。 如何得到一個查詢構造器: 依賴DB門面,使用它提供給我們的table方法,傳入表名,即可獲取該表的查詢構建器,在此基礎上我們可以使用強大的鏈式呼叫直到得到最終結果。3.1 獲取結果
$users = DB::table('users')->get();返回值: 一個數組結果,其中每一個結果都是 PHP StdClass 物件的例項,可以將列作為屬性訪問每個列的值。 訪問方法:
foreach ($users as $user) { echo $user->name; //操作的是物件的屬性 }3.1.2 從資料表中獲取單個列或行 1>取出單行資料,使用first 方法。
$user = DB::table('users')->where('name', 'John')->first();返回值:單個 StdClass 物件: 訪問方法:echo $user->name; 2>從單行資料中取出單個值,使用 value 方法。
$email = DB::table('users')->where('name', 'John')->value('email');返回值:直接返回欄位的值: 3.1.3 從資料表中將結果切塊 若你需要操作數千條資料庫記錄,則可考慮使用 chunk 方法。這個方法一次只取出一小「塊」結果,並會將每個區塊傳給一個閉包進行處理。 例如,讓我們將整個 user 資料表進行切塊,每次處理 100 條記錄:
DB::table('users')->chunk(100, function($users) { foreach ($users as $user) { // } });你可以從閉包中返回 false,以停止對後續切塊的處理:
DB::table('users')->chunk(100, function($users) { // 處理記錄… return false; });3.1.4 獲取欄位值列表 若你想要獲取一個包含單個欄位值的陣列,你可以使用pluck方法
$titles = DB::table('roles')->pluck('title');返回值:在這個例子中,我們將取出 role 資料表 title 欄位的陣列: 使用方法:
foreach ($titles as $title) { echo $title; }你也可以在返回的陣列中指定自定義的鍵值欄位:
$roles = DB::table('roles')->pluck('title', 'name'); foreach ($roles as $name => $title) { echo $title; }
3.2 select的用法
3.2.1 指定一個 Select 子句 //指定欄位$users = DB::table('users')->select('name', 'email as user_email')->get();//distinct 方法允許你強制讓查詢返回不重複的結果:
$users = DB::table('users')->distinct()->get();//已有一個例項,希望在select 子句中再加入一個欄位,則可以使用 addSelect 方法:
$query = DB::table('users')->select('name'); $users = $query->addSelect('age')->get();3.2.2 原始表示式 //DB::raw 方法可以防止注入 $users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get();
3.3 join的用法
3.3.1 基本用法(inner join)$users = DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get();如果想用左連線或者右連線,則使用leftjoin,rightjoin替換join即可 3.3.2 高階的 Join 語法 你也可以指定更高階的 join 子句。讓我們以傳入一個閉包當作 join 方法的第二引數來作為開始。此閉包會接收 JoinClause 物件,讓你可以在 join 子句上指定約束:
DB::table('users') ->join('contacts', function ($join) { $join->on('users.id', '=', 'contacts.user_id')->orOn(...); }) ->get();若你想要在連線中使用「where」風格的子句,則可以在連線中使用 where 和 orWhere 方法。這些方法會比較欄位和一個值,來代替兩個欄位的比較:
DB::table('users') ->join('contacts', function ($join) { $join->on('users.id', '=', 'contacts.user_id') ->where('contacts.user_id', '>', 5); }) ->get();這裡要提一下如果閉包函式functiton(){}中5是個變數,我們需要傳過去那麼應該這樣寫 function ($join) use($num){ $join->on('users.id', '=', 'contacts.user_id') ->where('contacts.user_id', '>', $num); 如果沒有use($num)外面的$num是沒法傳遞到where子句的
3.4 where的用法
3.4.1 基本用法$users = DB::table('users')->where('votes', '=', 100)->get(); $users = DB::table('users')->where('name', 'like', 'T%')->get(); $users = DB::table('users')->where('votes', 100)->get(); //省略了等號 $users = DB::table('users')->where('votes', '>', 100) ->orWhere('name', 'John')->get(); $users = DB::table('users')->whereBetween('votes', [1, 100])->get(); //一個欄位的值介於兩個值之間 $users = DB::table('users')->whereNotBetween('votes', [1, 100])->get(); //一個欄位的值落在兩個值之外 $users = DB::table('users')->whereIn('id', [1, 2, 3])->get(); //欄位的值包含在指定的陣列之內 $users = DB::table('users')->whereNotIn('id', [1, 2, 3])->get(); //欄位的值不包含在指定的陣列之內 $users = DB::table('users')->whereNull('updated_at')->get(); //指定列的值為 NULL $users = DB::table('users')->whereNotNull('updated_at')->get(); //一個列的值不為 NULL3.4.2 高階用法 將約束分組
DB::table('users') ->where('name', '=', 'John') ->orWhere(function ($query) { $query->where('votes', '>', 100) ->where('title', '<>', 'Admin'); }) ->get();上面例子會將閉包傳入 orWhere 方法,以告訴查詢語句構造器開始一個約束分組。此閉包接收一個查詢語句構造器的例項,你可用它來設定應包含在括號分組內的約束。上面的例子會生成以下 SQL:
select * from users where name = 'John' or (votes > 100 and title <> 'Admin')3.5 orderBy,groupBy,having //排序
$users = DB::table('users') ->orderBy('name', 'desc') ->get();//隨機排序
$randomUser = DB::table('users') ->inRandomOrder() ->first();//分組
$users = DB::table('users') ->groupBy('account_id') ->having('account_id', '>', 100) ->get();//havingRaw 方法可用來將原始字串設定為 having 子句的值
$users = DB::table('orders') ->select('department', DB::raw('SUM(price) as total_sales')) ->groupBy('department') ->havingRaw('SUM(price) > 2500') ->get();3.6 條件查詢語句 可以使用方法 when 來構建條件查詢語句,只有當 when 的第一次引數為 true 的話,匿名函式裡的 where 語句才會被執行:
$role = $request->input('role'); $users = DB::table('users') ->when($role, function ($query) use ($role) { return $query->where('role_id', $role); }) ->get();3.7 insert的用法 //插入一組資料
DB::table('users')->insert( ['email' => '[email protected]', 'votes' => 0] );//插入多組資料
DB::table('users')->insert([ ['email' => '[email protected]', 'votes' => 0], ['email' => '[email protected]', 'votes' => 0] ]);//若資料表有自動遞增的 id,則可使用 insertGetId 方法來插入記錄並獲取其 ID:
$id = DB::table('users')->insertGetId( ['email' => '[email protected]', 'votes' => 0] );3.8 update的用法
DB::table('users') ->where('id', 1) ->update(['votes' => 1]);3.9 delete
DB::table('users')->delete(); DB::table('users')->where('votes', '<', 100)->delete(); //若你希望截去整個資料表的所有資料列,並將自動遞增 ID 重設為零,則可以使用 truncate 方法: DB::table('users')->truncate();3.10悲觀鎖定
相關推薦
laravel鏈式操作
2.2刪 $deleted = DB::delete('delete from users'); 返回值:刪除的行數將會被返回 2.3改-> $affected = DB::update('update users set votes = 100
C++中的鏈式操作
getch sna 產生 fun pen 教程 輸入輸出 data 圖片 代碼編譯環境:Windows7 32bits+VS2012。 1.什麽是鏈式操作 鏈式操作是利用運算符進行的連續運算(操作)。它的特點是在一條語句中出現兩個或者兩個以上
php 鏈式操作的實現 學習記錄
html fun log name ret color mes logs 鏈式 php 面向對象中實現鏈式操作的關鍵部分:調用的方法中返回當前對象 ,從而實現鏈式操作; <?php namespace commom; class db { p
PHP設計模式:類自動載入、PSR-0規範、鏈式操作、11種面向物件設計模式實現和使用、OOP的基本原則和自動載入配置
一、類自動載入 SPL函式 (standard php librarys) 類自動載入,儘管 __autoload() 函式也能自動載入類和介面,但更建議使用&nbs
jquery鏈式操作的封裝
原理很簡單每次執行完函式返回this 直接上程式碼 function test(){ this.name; this.age; } test.prototype.testChild=function(){ this.name="demo" ret
PHP實現的連貫操作、鏈式操作例項
PHP中的連貫操作看起來的確很酷,也非常的方便程式碼的閱讀,當然了必須是在OOP中用才行,在過程化的程式中,就沒有必要用這種方法了。有實現這個方法的有用_CALL來實現的,下面的這個例子,則不是用_call的 /* * SQL語句組合例項類,始發文章web開發筆記 * 學習用,非專業
[GO]小技巧,如何實現一個鏈式操作
package main import "fmt" type Stu struct { Name string Age int } func (p *Stu) SetName(name string) *Stu { p.Name = name return p }
php 資料庫鏈式操作--虛擬碼
<?php class Test { public function __construct() { echo "construct"; } public function where() {
PHP實現鏈式操作的三種方法詳解
ret 思想 ont 過濾字符 一個 詳解 rgs 通過 span 這篇文章主要介紹了PHP實現鏈式操作的三種方法,結合實例形式分析了php鏈式操作的相關實現技巧與使用註意事項,需要的朋友可以參考下 本文實例講述了PHP實現鏈式操作的三種方法。分享給大家供大家參考,具
PHP PDO_MYSQL 鏈式操作 非鏈式操作類
<?php /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +----------------------------------------------------------------------+ // | PHP version 5
PHP實現鏈式操作
php鏈式操作的關鍵是在做完操作後要return $this; 一、不使用__call方法實現鏈式操作 <?php class Sql{ private $sql=arra
【TP5 :資料庫:查詢構造器:鏈式操作】join
join INNER JOIN: 等同於 JOIN(預設的JOIN型別),如果表中有至少一個匹配,則返回行 LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行 RIGHT JOIN: 即
【TP5 :資料庫:查詢構造器:鏈式操作】cache
cache cache方法用於查詢快取操作,連貫操作方法 用於select、find、value和column方法,以及其衍生方法 在快取有效期之內不會再次進行資料庫查詢操作,而是直接獲取快取中的資料 //find方法使用cache方法 Db::ta
【TP5 :資料庫:查詢構造器:鏈式操作】時間查詢
時間查詢 時間比較 使用where方法 where方法支援時間比較 // 大於某個時間 where('create_time','> time','2016-1-1'); //
express中的get post use處理,鏈式操作,封裝中介軟體
1、在express中的get處理表單處理的資料,即伺服器獲取get方式提交的資料,通過req.query獲取提交的資料,格式是json // 客戶端程式碼 <!doctype html> <html> <head>
【TP5:資料庫:查詢構造器】鏈式操作
鏈式操作 資料庫提供的鏈式操作方法支援所有的CURD操作 使用示例: Db::table('think_user') ->where('status',1) ->order('create_time') ->l
tp5 鏈式操作
where()普通查詢(等值查詢)陣列方式批量設定查詢條件$map['name'] = 'thinkphp';$map['status'] = 1;// 把查詢條件傳入查詢方法Db::table('think_user')->where($map)->select
JS鏈式操作
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
jquery 鏈式操作
new for truct window prototype ret const func cti (function(window){ function jQuery(element){ return ne
php pdo類 防注入,事務,多庫自動選擇,鏈式操作
因為某些原因目前業務不用框架開發,自己寫了一個pdo類實現防注入,事務等,後續還會繼續完善 <?php /*