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