代码改变世界

每天laravel[033]-laravel 基础知识 --- 数据库

2017-06-06 22:04  吃饱了才能撑着  阅读(138)  评论(0)    收藏  举报
基础配置
1.1     laravel 支持的数据库有,MySQL,Postgres,SQLite,SQL Server
1.2     数据库配置文件位置 config/database.php
1.3     支持读写分离的配置
'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
    ],
    'write' => [
        'host' => '196.168.1.2'
    ],
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',],
1.4     基础使用 方式 增删改查 及其它通常操作
一般使用
     $user = DB::select('select * from users where active = ?',[1]);
绑定名字
     $result = DB::insert('insert into users (id,name) values (?,?)',[1,'JingShan']);
更新
     $affected = DB::update('update users set votes = 1000 where name = ?',['john']);
删除
     $deleted = DB::delete('delete from users');
通常的语句
     DB::statement('drop table users');
 
1.5      调试方式,注册query 监听器
 在我们的 AppServiceProvider 里面选择boot函数添加,监听函数如下
public function boot(){
     DB::listen(function($sql,$binding,$time){
          // 执行监听的逻辑
     });
}
1.6     事务支持
自动事务处理
DB::transaction(function(){
     DB::table('users')->update(['votes'=>1]);
     DB::table('posts')->delete();
});
手动事务支持
DB::beginTransaction();
DB::rollBack();
DB::commit();
1.7 更多数据库及PDO方式支持
更多数据库连接灵活选择
$users = DB::connection('foo')->select();
使用PDO的连接实例化
$pdo = DB::connection()->getPdo();
 
 
查询构造器
2.1     获取全部信息
$users = DB::table('users')->get();
2.2     返回单条数据
$user = DB::table('users')->where('name','jhon')->first();
返回单条数据里面的单个字段
$email = DB::table('users')->where('name','Jhon')->value('email');
2.3     分解表格结果
DB::table('users')->chunk(100,function($users){
     foreach($users as $user){
          // TODO     
     }
});
如果当内部的闭包匿名函数返回错误的时候,停止分解表格
DB::table('users')->chunk(100,function($users){
     // TODO
     return false;// 返回false 就停止后面的拆分了。
});
2.4     取出一列数据作为一个集合
普通取出
$titles = DB::table('roles')->lists('title');
foreach($titles as $title){
     echo $title;
}
增加key的方式取出
$roles = DB::table('roles')->lists('title','name');
foreach($roles as $name => $title){
     echo $title;
}
 
2.5     计算聚合结果如:count,max,min,avg,sum 实例代码如下:
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
$price = DB::table('orders')->where('finalized',1)->avg('price');
 
2.6     选择数据的使用
基础使用
$users = DB::tables('users')->select('name','email as user_email')->get();
去重选择
$users = DB::table('users')->distinct()->get();
二次编辑选择字段
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
使用原生表达式的选择方式
$users = DB::table('users')
     ->select(DB::raw('count(*) as user_count ,status'))
     ->where('status','<>',1)
     ->groupBy('status')
     ->get()
2.7 joins 联合查询
默认的join使用
$user = DB::table('users')
     ->join('contacts','users.id','=','contacts.user_id')
     ->join('orders','users.id','=','orders.user_id')
     ->select('users.*','contacts.phone','orders.price')
     ->get();
左链接
$user = DB::table('users')
     ->leftJoin('posts','users.id','=','posts.user_id')
     ->get();
更复杂的 join 查询
DB::table('users')
     ->join('contacts',function($join){
         $join->on('users_id','=','contacts.user_id')
               ->where('contacts.user_id','>',5); 
     })
     ->get();
或者可以使用 orOn 或者是 orWhere 方式
2.8     联合数据结果 Unions
$first = DB::table('users')
     ->whereNull('first_name');
$users = DB::table('users')
     ->whereNull('last_name')
     ->union($first)
     ->get();
2.9     强大的 where 查询操作
基础的
$users = DB::table('users')->where('votes','=',100)->get();
基础 等于 简化版本
$users = DB::table('users')->where('votes',100)->get();
其它关系操作
$users = DB::table('users')->where('votes','>=',100)->get();
$users = DB::table('users')->where('votes','<>',100)->get();
$users = DB::table('users')->where('votes','like=','%a%')->get();
or条件的拼合
$users = DB::table('users')
     ->where('votes','>',100)
     ->orWhere('name','John')
     ->get();
whereBetween 方式
$users = DB::table('users')->whereBetween('votes',[1,100])->get();
whererNotBetween
$users = DB::table('users')->whereNotBetween('votes',[1,100])->get();
whereIn/whereNoIn/whereNull/whereNotNull
$users = DB::table('users')->whereIn('id',[1,2,4])->get();
$users = DB::table('users')->whereNotIn('id',[1,2,4])->get();
$users = DB::table('users')->whereNull('id')->get();
$users = DB::table('users')->whereNotNull('id')->get();
 
高阶where条件查询
DB::table('users')
     ->where('name','=','John')
     ->orWhere(function($query){
          $query->where('votes','>',100)
               ->where('title','<>','Admin');
     })
     ->get();
翻译过来:
select * from users where name = 'John' or (votes > 100 and title <> 'Admin')
 
exists Statemets 语句条件
DB::table('users')
     ->whereExists(function($query){
          $query->select(DB::raw(1))
               ->from('orders')
               whereRaw('orders.user_id = users.id ');
     })
     ->get();
 
结果为:
select * from users where exits (select 1 from orders where orders.user_id = users.id )
 
Ordering,Grouping,Limit,Offset 设置
$users = DB::tabel('users')
     ->orderBy('name','desc')
     ->get();
 
$users = DB::table('users')
     ->groupBy('account_id')
     ->having('account_id','>',100)
     ->get();
 
$users = DB::table('orders')
     ->select('department',DB::raw('SUM(price) as total_sales'))
     ->groupBy('department')
     ->havingRaw('SUM(price) > 2500')
     ->get();
 
对结果集进行处理
$users = DB::table('users')->skip(10)->take(5)->get();
 
2.10     插入数据
普通插入
DB::table('users')->insert(['email'=>'john@example','votes'=>0]);
多行插入
DB::table('users')->insert([
     ['email'=>'taylor@example.com','votes'=>0],
     ['email'=>'123@example.com','votes'=>0 ]
]);
返回自增长ID
$id = DB::table('users')->insertGetId(['email'=>'john@example.com','votes'=>0]);
 
更新数据:
DB::table('users')
     ->where('id',1)
     ->update(['votes'=>1]);
增长/减少
DB::table('users')->increment('votes');
DB::table('users')->increment('votes',5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes',5);
 
可以混合增长
DB::table('users')->increment('votes',1,['name'=>'John']);
 
2.11     删除信息/ 清空数据库
DB::table('users')->delete();
DB::table('users')->where('votes','<',100)->delete();
DB::table('users')->truncate();// 清空数据库
 
2.12     锁
DB::table('users')->where('votes','>',100)->shareLock()->get();
DB::table('users')->where('votes','>',100)->lockForUpdate()->get();
php初学者---千锋php课堂笔记