1. 程式人生 > >laravel鏈式操作

laravel鏈式操作

2.2刪
$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 物件,這使你能夠訪問到結果的值: 訪問方法:
foreach
($users as $user) { echo $user->name; }
2.5事務處理-> //自動
DB::transaction(function () { 
    DB::table('users')->update(['votes' => 1]); 
    DB::table('posts')->delete(); 
});
//手動(可配合try catch使用)
DB::beginTransaction(); 
if($someContion){ 
    DB::rollback(); 
    return
false; } DB::commit();
2.6有時候一些資料庫操作不應該返回任何引數。對於這種型別的操作,你可以在 DB facade 使用 statement 方法:
DB::statement('drop table users');

3 查詢構造器

為什麼要使用查詢構造器? 1>因為資料庫查詢構造器提供了方便、流暢的介面,我們不需要再寫原生的sql語句,通過查詢構造器提供給我們的各種方法來建立及執行資料庫查詢。這能夠滿足我們大部分需要,且能在所有被支援的資料庫系統中使用。 2>Laravel 的查詢構造器使用 PDO 引數繫結,以保護你的應用程式不受資料庫注入攻擊。在傳入字串作為繫結前不需要先清理它們。 如何得到一個查詢構造器: 依賴DB門面,使用它提供給我們的table方法,傳入表名,即可獲取該表的查詢構建器,在此基礎上我們可以使用強大的鏈式呼叫直到得到最終結果。

3.1 獲取結果

3.1.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(); //一個列的值不為 NULL
3.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 /*