一、laravel中DB類的使用
1.使用DB門面的table方法枕稀,table方法為給定表返回一個查詢構(gòu)建器弟翘,允許你在查詢上鏈接更多約束條件并最終返回查詢結(jié)果命斧。我們使用get方法獲取表中所有記錄,和原生查詢一樣近忙,get方法返回結(jié)果集的數(shù)據(jù)組竭业,其中每一個結(jié)果都是PHP對象的StdClass實例。你可以像訪問對象的屬性一樣訪問列的值及舍。
<?php
namespace App\Http\Controllers;
use DB;
use App\Http\Controllers\Controller;
class UserController extends Controller{
/**
* 顯示用戶列表
*
* @return Response
*/
public function index()
{
$users = DB::table('users')->get();
return view('user.index', ['users' => $users]);
}
}
2.從一張表中獲取一行或一列,如果我們只是想要從數(shù)據(jù)表中獲取一行數(shù)據(jù)未辆,可以使用first方法,該方法將會返回單個StdClass對象.
$user = DB::table('users')->where('name', 'John')->first();
echo $user->name;
3.從一張表中獲取組塊結(jié)果集,如果我們需要處理成千上百條數(shù)據(jù)庫記錄锯玛,可以考慮使用chunk方法鼎姐,該方法一次獲取結(jié)果集的一小塊,然后填充每一小塊數(shù)據(jù)到要處理的閉包更振,該方法在編寫處理大量數(shù)據(jù)庫記錄的Artisan命令的時候非常有用。比如饭尝,我們在批量處理刪除或更新的時候使用方法非常有用:
DB::table('users')->chunk(100, function($users) {
foreach ($users as $user) {
$user->delete();
}
});
還可以通過從閉包函數(shù)中返回false來中止組塊的運行:
DB::table('users')->chunk(100, function($users) {
return false;
});
如果想要獲取包含單個列值的數(shù)組肯腕,可以使用lists方法,在本例中钥平,我們獲取所有title的數(shù)組:
$titles = DB::table('users')->lists('title');
foreach ($titles as $title) {
echo $title;
}
在還可以在返回數(shù)組中為列值指定更多的自定義鍵(該自定義鍵必須是該表的其它字段列名实撒,否則會報錯:
$users = DB::table('users')->lists('title', 'name');
foreach ($users as $name => $title) {
echo $title;
}
}
二姊途、內(nèi)連接
查詢構(gòu)建器還可以用于編寫基本的SQL“內(nèi)連接”,你可以使用查詢構(gòu)建器實例上的join方法知态,傳遞給join方法的第一次參數(shù)是你需要連接到的表名捷兰,剩余的其它參數(shù)則是為連接指定的列約束,當(dāng)然负敏,正如你所看到的贡茅,你可以在單個查詢中連接多張表.
$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();
三、Where子句
使用查詢構(gòu)建器上的where方法可以添加where子句到查詢中其做,調(diào)用where最基本的方法需要三個參數(shù)顶考,第一個參數(shù)是列名,第二個參數(shù)是一個數(shù)據(jù)庫系統(tǒng)支持的任意操作符妖泄,第三個參數(shù)是該列要比較的值.
$users = DB::table('users')->where('votes', '=', 100)->get();
為了方便驹沿,如果只是簡單比較列值和給定數(shù)值是否相等,可以將數(shù)值直接作為where方法的第二個參數(shù):
$users = DB::table('users')->where('votes', 100)->get();
四蹈胡、Insert插入方法
查詢構(gòu)建器還提供了insert方法來插入記錄到數(shù)據(jù)表渊季。insert方法接收數(shù)組形式的列名和值進(jìn)行插入操作:
DB::table('users')->insert(['email' => 'john@example.com', 'votes' => 0]);
我們甚至可以一次性通過傳入多個數(shù)組來插入多條記錄,每個數(shù)組代表要插入數(shù)據(jù)表的記錄:
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
五罚渐、Update更新
當(dāng)然却汉,除了插入記錄到數(shù)據(jù)庫,查詢構(gòu)建器還可以通過使用update方法更新已有記錄搅轿。update方法和insert方法一樣病涨,接收列和值的鍵值對數(shù)組包含要更新的列,我們可以通過where子句來對update查詢進(jìn)行約束:
DB::table('users')->where('id', 1)->update(['votes' => 1]);
六璧坟、Delete刪除
查詢構(gòu)建器還可以通過delete方法從表中刪除記錄:
DB::table('users')->where('id', 1)->delete();
在調(diào)用delete方法之前可以通過添加where子句對delete語句進(jìn)行約束:
DB::table('users')->where('votes', '<', 100)->delete();
如果我們希望清除整張表既穆,也就是刪除所有列并將自增ID置為0,可以使用truncate方法:
DB::table('users')->truncate();
內(nèi)容來源:Laravel學(xué)院5.1查詢構(gòu)造器