1 基础配置
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 查询构造器
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();










