您的位置:首页 > 编程语言 > PHP开发

[李景山php]每天laravel[033]-laravel 基础知识 --- 数据库

2017-04-08 10:30 615 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐