laravel DB類,查詢構造器

laravel分爲三大數據庫操作(DB facade[原始查找],查詢構造器[Query Builder],Eloquent ORM):

1,DB facade

use Illuminate\Support\Facades\DB;


DB::select('select * from users where id = :id', ['id' => 1]);
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
DB::update('update users set votes = 100 where name = ?', ['John']);
DB::delete('delete from vipinfo where vip_ID= ?',[5]); 
DB::statement('drop table users');

  

2,查詢構造器[Query Builder]

1. 查詢所有
         $data = DB::table('user')->get();

 2. 查詢所有,並指定字段 推薦使第一種方式
         $data = DB::table("user名")->select("name", "email")->get();
         $data = DB::table("user名") ->select(DB::raw('count(id) as count'), "email");
         $data = DB::table("user名")->selectRaw("count(id) as count, email")->get();
         $data = DB::table('user')->get(['name','age']);
         
 3. 查詢單條數據
         $ret = DB::table('member')->where('id', 5)->first();
         
 4. 獲取單個值
         $email = DB::table('users')->where('name', 'John')->value('email');

 5. 獲取包含單列值的集合
         $titles = DB::table('roles')->pluck('title');
         // 會將 roles 表中的 name 字段當做鍵名,title 字段當做鍵值返回
         $roles = DB::table('roles')->pluck('title', 'name');

 6. 根據主鍵獲取一條數據–find方法
         $user = DB::table('users')->find(1);
         $user = DB::table('users')->find([1, 2, 3]);
         
 7. 排序
         DB::table('users')->orderBy('name', 'desc') ->orderBy('rs.created_at', 'desc')->get();
         DB::table('orders')->orderByRaw('updated_at - created_at DESC')->get();
 
 9. 數據結果去重(distinct 方法會強制讓查詢返回的結果不重複)
         $users = DB::table('users')->distinct()->get();
 
 7. 查詢前幾條數據
         $data = DB::table('member')->where('active', 1)->take(10)->get();                
         $data = DB::table('member')->where('active', 1)->limit(10)->get();
         
 8. 分頁查詢
         $data = DB::table('member')->orderBy('id','desc')->paginate(10);
         $data = DB::table('member')->orderBy('id','desc')->offset(0)->limit(10)->get();
                 limit:表示限制輸出的條數
                 offset:從什麼地方開始,起始從0開始
         
 9. 條件查詢
         DB::table("表名")->where([['a', '=', '1'],['b', '<>', '1']])->get();
         DB::table("表名")->where("name",">","10")->whereIn("titile",[1,2,3])->get();
         DB::table("表名")->where("name",">","10")->whereBetween("titile",[0,10])->get();
         DB::table("表名")->where("name",">","10")->orWhere("titile","=","0")->get();
         
 10. 分羣(Group By)及 Having
         DB::table("users")->orderBy("name","desc")->groupBy("count")->having("count",">",100)->get()
         
 11. 模糊查詢
          DB::table('users')->where('name', 'like', '%名稱%')->get();
          
 12. 聚合查詢 count, max, min, avg和 sum
          $users = DB::table('users')->count();
          $price = DB::table('orders')->max('price');

//count()統計記錄條數
$nums=DB::table("vipinfo")->count();
echo $nums;
//max()某個字段的最大值,同理min是最小值
$max=DB::table("vipinfo")->max("vip_fenshu");
echo $max;
//avg()某個字段的平均值
$avg=DB::table("vipinfo")->avg("vip_fenshu");
echo $avg;
//sum()某個字段的和
$sum=DB::table("vipinfo")->sum("vip_fenshu")
 
 13. 強制讓查詢返回的結果不重複
         $users = DB::table('users')->distinct()->get();
 14. 關聯查詢
$result = DB::table('requirement_surveys as rs')
         ->select('rs.id', 'rs.process', 'r.requirement_id', 'r.title', 'u.name')
         ->leftJoin('requirements as r', 'rs.requirement_id', '=', 'r.requirement_id')
         ->leftJoin('users as u', 'u.id', '=', 'r.author_id')
         ->where('u.name', 'like', "%$name%")
         ->where('r.title', 'like', "%$title%")
         ->orderBy('rs.process', 'asc')
         ->orderBy('rs.created_at', 'desc')
         ->paginate($page_limit);
         
 $users = DB::table('users')
         ->rightJoin('posts', 'users.id', '=', 'posts.user_id')
         ->get();
         
 $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();
 15,複製查詢
//查詢出現次數最多的商品名
 $product_name = Db::table('guild_pay.order')
         ->where('status', '=', 1)
         ->select(DB::raw('count(*) as count, product_name'))
         ->orderBy('count', 'desc')
         ->groupBy('product_name')
         ->first();

 //兩個數據庫中有兩個不相關的表,我需要將它們合併,並在order2中新增不存在的字段,並賦予默認值
 $product_name = '默認值'$news = DB::table("guild_pay.order1")
         ->where('status', '=', 1)
         ->selectRaw('product_name','order_no','money','create_time');
 $res = Db::table('guild_pay.order2')
           ->where('status', '=', 1)
         ->union($news)
         ->selectRaw('IFNULL(null, ?) as product_name, order_no, money, create_time', [$product_name])
         ->orderBy('create_time', 'desc')
         ->paginate(10)->toArray();
 ps:記得兩個表的key要一一對應,不可以一邊多一邊少,也不可以換位置
 

刪除

$ret = DB::table('member')->where('id',2)->delete();
$num=DB::table("vipinfo")->truncate();//刪除整表,不能恢復,謹慎使用
增加
1. 添加單條數據
         $ret = DB::table('member')->insertGetId($data);
         $ret = DB::table('member')->insert($data);
         insert() 可以同時添加一條或多條,返回值是布爾類型。
         insertGetId() 只能添加一條數據,返回得到插入時的ID值。
     
 2. 添加多條記錄
         $ret = DB::table('member')->insert([
             ['name'=>'AAAA','age'=>20,'email'=>'[email protected]'],
             ['name'=>'BBBB','age'=>30,'email'=>'[email protected]'],
         ]);
 
修改
$ret = DB::table('member')->where('id', 2)->update([
     'name' => '修改一下',
     'age'  => 50
 ]);
$bool=DB::table("vipinfo")->where('vip_ID',6)->update(['vip_fenshu'=>500]);
echo $bool;

//自增

$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu");//自增1

$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu",3);//自增3

echo $bool;

//自減

$bool=DB::table("vipinfo")->where('vip_ID',6)->decrement("vip_fenshu");//自1

$bool=DB::table("vipinfo")->where('vip_ID',6)->decrement("vip_fenshu",3);//自增3

echo $bool;

//自增時再修改其他字段

$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu",3,['vip_name'=>'dbdibi']);//自增3
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章