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();